Search code examples
c#jsonapiunity-game-enginenested

How to create a nested data in json in the given format using unity c#


I am still learning , Here is the given format -

{"table": "userdata","data":{ "walletaddress": "0x15be4040E5147Cd9F8Cc4600C9D6Da720F2631Ea", "character": "alice","gender": "male","name": "test_joe"}}

Here is my code -

public class PlayerData
{
    public string walletaddress;
    public string name;
    public string gender;
    public int character;
    
}

public IEnumerator POST()
{
    string url = "xyz";

    PlayerData playerData = new PlayerData();
    playerData.character = PlayerPrefs.GetInt("PlayerAvatar");
    //data.userEggCount = 0;
    playerData.gender = PlayerPrefs.GetString("PlayerGender");
    playerData.name = PlayerPrefs.GetString(playerNamePrefKey);
    playerData.walletaddress = "123";//PlayerPrefs.GetString("Account");
    string jsonStringTrial = JsonUtility.ToJson(playerData);
    Debug.Log(jsonStringTrial);

    using(UnityWebRequest request = UnityWebRequest.Put(url, jsonStringTrial))
    {
        request.method = UnityWebRequest.kHttpVerbPOST;
        request.SetRequestHeader("Content-Type", "application/json");
        request.SetRequestHeader("Accept", "application/json");
        yield return request.SendWebRequest();
        if(request.result == UnityWebRequest.Result.Success)
        {
            Debug.Log("Sent Data Successfully");
        }
        else
        {
            Debug.Log("Data not Sent");
        }
    }

this gives me data in this format -

{"walletaddress":"123","name":"Darshan","gender":"1","character":1}


Solution

  • You should construct your models to achieve json same as {"table": "userdata","data":{ "walletaddress": "0x15be4040E5147Cd9F8Cc4600C9D6Da720F2631Ea", "character": "alice","gender": "male","name": "test_joe"}} to,

    Do some adjustment if required but this would work nearly or 100% as you need,

    [System.Serializable]
    public class Data
    {
        public string walletaddress;
        public string character;
        public string gender;
        public string name;
    
    }
    
    [System.Serializable]
    public class PlayerData
    {
        public string table;
        public Data data;
    }
    
    public IEnumerator POST()
    {
        string url = "xyz";
    
        PlayerData playerData = new PlayerData();
        playerData.table = "<valuetable>"
        playerData.data.character = PlayerPrefs.GetInt("PlayerAvatar");
        //data.userEggCount = 0;
        playerData.data.gender = PlayerPrefs.GetString("PlayerGender");
        playerData.data.name = PlayerPrefs.GetString(playerNamePrefKey);
        playerData.data.walletaddress = "123";//PlayerPrefs.GetString("Account");
        string jsonStringTrial = JsonUtility.ToJson(playerData);
        Debug.Log(jsonStringTrial);
    
        using (UnityWebRequest request = UnityWebRequest.Put(url, jsonStringTrial))
        {
            request.method = UnityWebRequest.kHttpVerbPOST;
            request.SetRequestHeader("Content-Type", "application/json");
            request.SetRequestHeader("Accept", "application/json");
            yield return request.SendWebRequest();
            if (request.result == UnityWebRequest.Result.Success)
            {
                Debug.Log("Sent Data Successfully");
            }
            else
            {
                Debug.Log("Data not Sent");
            }
        }