You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity C#如何按指定格式生成嵌套结构JSON数据

问题原因
  • 缺少外层请求结构定义:你当前只序列化了内层玩家数据类,没有封装接口要求的table固定字段和data嵌套层级,所以输出是平铺结构
  • 字段类型不匹配:目标JSON要求character为字符串类型(如"alice"),你当前定义为int类型,序列化后会输出数字值
  • 字段值未做映射:本地存储的性别、角色是数字ID,需要转换成接口要求的字符串值再赋值
修复方案
  1. 给所有需要JsonUtility序列化的自定义类添加[System.Serializable]特性,否则序列化会丢失字段
  2. 修正PlayerData类中character字段的类型为string
  3. 新增外层请求包装类,固定写入table = "userdata",同时定义PlayerData类型的data字段承接内层数据
  4. 赋值时把本地存储的数字ID(角色、性别)映射成接口要求的字符串值
  5. 序列化时传入外层包装类实例,即可生成符合嵌套要求的JSON
修正后可直接运行的代码
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;

[System.Serializable]
public class PlayerData
{
    public string walletaddress;
    public string name;
    public string gender;
    public string character;
}

[System.Serializable]
public class UserSubmitRequest
{
    public string table = "userdata";
    public PlayerData data;
}

public class DataSubmitter : MonoBehaviour
{
    private string playerNamePrefKey = "PlayerName"; // 替换为你项目实际的玩家名存储key
    
    public IEnumerator POST()
    {
        string url = "xyz";
        PlayerData playerData = new PlayerData();
        
        // 角色ID转字符串映射,根据你项目实际的ID对应关系修改
        int avatarId = PlayerPrefs.GetInt("PlayerAvatar");
        playerData.character = avatarId switch
        {
            1 => "alice",
            // 其他角色映射自行补充
            _ => "alice"
        };
        
        // 性别ID转字符串映射,根据你项目实际存储规则修改
        int genderCode = PlayerPrefs.GetInt("PlayerGender", 0);
        playerData.gender = genderCode == 1 ? "male" : "female";
        
        playerData.name = PlayerPrefs.GetString(playerNamePrefKey);
        // 替换为你实际的钱包地址读取逻辑,不要写死测试值
        playerData.walletaddress = PlayerPrefs.GetString("Account", "");
        
        UserSubmitRequest submitData = new UserSubmitRequest
        {
            data = playerData
        };
        
        string jsonContent = JsonUtility.ToJson(submitData);
        Debug.Log($"生成的请求JSON:{jsonContent}");

        using (UnityWebRequest request = new UnityWebRequest(url, "POST"))
        {
            byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(jsonContent);
            request.uploadHandler = new UploadHandlerRaw(bodyRaw);
            request.downloadHandler = new DownloadHandlerBuffer();
            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, error: {request.error}");
            }
        }
    }
}

序列化后输出的JSON结构会完全匹配要求:
{"table":"userdata","data":{"walletaddress":"实际钱包地址","character":"alice","gender":"male","name":"test_joe"}}

内容的提问来源于stack exchange,提问作者BLACK GOKU

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:15:58