본문 바로가기
Programming/Unity

[Unity] UnityWebRequest로 json 데이터를 Http body에 Post로 전달방법

by 타임박스 2021. 4. 21.
반응형


✔ Post raw json into UnityWebRequest

JsonUtility, Convert json from object



Http 서버 body에 Post 방식으로 json 데이터를 전달하는 방법이다.

json으로 전달하기 위해서는 먼저 데이터를 json으로 변경해야한다.

Unity에서는 JsonUtility를 제공하여 쉽게 변환할 수 있다.

오브젝트를 Json으로 변환 : JsonUtility.ToJson(object)

Json을 오브젝트로 변환 : JsonUtility.FromJson(jsonString, System.Type)

 

아래는 예제 샘플이다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Data;
using UnityEngine.Networking;

[System.Serializable]
public class User
{
    public string Name;
    public string ID;
    
}

[System.Serializable]
public class Users
{
    public List<User> users = new List<User>();
}

public class Test : MonoBehaviour
{
    void Start()
    {
        //Test용 User create
        User user1 = new User
        {
            Name = "Kim",
            ID = "qq"
        };

        User user2 = new User
        {
            Name = "Lee",
            ID = "tt"
        };

        Users user_arr = new Users();

        //Add user
        user_arr.users.Add(user1);
        user_arr.users.Add(user2);

        //Convert JsonString
        string json = JsonUtility.ToJson(user_arr);
        
        //request Post
        StartCoroutine(Upload("http://URL", json));
    }

    IEnumerator Upload(string URL, string json)
    {
        using (UnityWebRequest request = UnityWebRequest.Post(URL, json))
        {
            byte[] jsonToSend = new System.Text.UTF8Encoding().GetBytes(json);
            request.uploadHandler = new UploadHandlerRaw(jsonToSend);
            request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
            request.SetRequestHeader("Content-Type", "application/json");

            yield return request.SendWebRequest();

            if (request.isNetworkError || request.isHttpError)
            {
                Debug.Log(request.error);
            }
            else
            {
                Debug.Log(request.downloadHandler.text);
            }

        }
    }
 }

 

감사합니다.

반응형

댓글