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

C#(Unity环境)如何给字符串形式JSON的指定属性赋值

Unity C# 向JSON字符串注入变量的实现方案

方案1:字符串插值/替换(轻量快速,适用于简单固定JSON)

  • 适用场景:JSON结构固定、字段少,变量内容无特殊字符(双引号、换行等)
  • 实现代码:
var appName = "Testing001";
// C# 10及以上支持用原始字符串插值,无需手动转义双引号
var json = $$"""
{
    "values": {
        "AppName": "{{appName}}",
        "Time": "23:15"
    }
}
""";

// 低版本C#可以用string.Format实现
// var json = string.Format(@"{{
//     ""values"": {{
//         ""AppName"": ""{0}"",
//         ""Time"": ""23:15""
//     }}
// }}", appName);
  • 注意事项:手写JSON容易出现冗余逗号、转义错误等问题,变量含特殊字符会破坏JSON格式,仅推荐临时测试用。

方案2:Unity原生JsonUtility序列化(无额外依赖,兼容性最优)

  • 适用场景:大部分常规JSON结构,不想引入第三方依赖的项目
  • 实现步骤:先定义和JSON结构匹配的可序列化类,再构造对象序列化为JSON
// 提前定义和JSON结构匹配的可序列化类
[Serializable]
public class PostDataRoot
{
    public PostDataValues values;
}

[Serializable]
public class PostDataValues
{
    public string AppName;
    public string Time;
}

// Start方法内的逻辑
IEnumerator Start(){
    var appName = "Testing001";
    // 构造数据对象
    var postData = new PostDataRoot
    {
        values = new PostDataValues
        {
            AppName = appName,
            Time = "23:15"
        }
    };
    // 自动生成标准JSON字符串,自动处理转义
    var json = JsonUtility.ToJson(postData);
    var jsonBytes = Encoding.UTF8.GetBytes (json);

    // 后续UnityWebRequest逻辑不变
    using (var www = new UnityWebRequest (url, "POST")) {
        www.uploadHandler = new UploadHandlerRaw (jsonBytes);
        www.downloadHandler = new DownloadHandlerBuffer ();
        www.SetRequestHeader ("Content-Type", "application/json");
        www.SetRequestHeader ("Accept", "text/plain");

        yield return www.SendWebRequest ();

        if (www.isNetworkError || www.isHttpError) {
            Debug.Log (www.error);
        } else {
            Debug.Log (www.downloadHandler.text);
        }
    }
}
  • 注意事项:JsonUtility不支持无序列化标签的类、嵌套字典、顶级数组等复杂结构,特殊需求需要额外处理。

方案3:Newtonsoft.Json(Json.NET)动态修改(功能最全,适用于复杂场景)

  • 适用场景:需要动态修改JSON字段、JSON结构复杂、原生JsonUtility不支持的场景,Unity 2020+可直接在包管理器安装Newtonsoft.Json
  • 实现代码(支持直接修改已有的JSON字符串,无需提前定义完整类):
using Newtonsoft.Json.Linq;

IEnumerator Start(){
    var appName = "Testing001";
    // 解析原有JSON字符串为可编辑的JObject对象
    var jsonObj = JObject.Parse(@"{
        ""values"": {
        ""AppName"": """",
        ""Time"": ""23:15""
        }
    }");
    // 直接给指定属性赋值
    jsonObj["values"]["AppName"] = appName;
    // 转回标准JSON字符串
    var json = jsonObj.ToString();
    var jsonBytes = Encoding.UTF8.GetBytes (json);

    // 后续UnityWebRequest逻辑和原有一致
}
  • 优点:支持任意JSON结构操作,自动处理所有格式转义,无需提前定义完整数据类,修改单个字段成本极低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:36:03