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
相关产品推荐
相关产品推荐

