如何通过代码JsonConvert.SerializeObject(new { brackets = "" })生成JSON:{"{}":""}
如何生成属性名为
{}的JSON? 嘿,这个问题我之前也碰到过!因为C#里匿名类的属性名没法直接用{}这种特殊字符,所以直接写new { brackets = "" }肯定达不到你要的效果,给你分享几种简单靠谱的解决办法:
方法1:用JObject直接构建(最直观)
Newtonsoft.Json自带的JObject可以直接设置任意字符串作为属性名,完全不受C#标识符规则限制:
using Newtonsoft.Json.Linq; var jsonObj = new JObject(); jsonObj["{}"] = ""; string resultJson = jsonObj.ToString(); // 输出就是你要的 {"{}":""}
方法2:借助字典序列化
字典的键可以是任意字符串,序列化的时候会直接把键转成JSON的属性名,操作起来也很方便:
using Newtonsoft.Json; var keyValuePairs = new Dictionary<string, string> { ["{}"] = "" }; string resultJson = JsonConvert.SerializeObject(keyValuePairs); // 同样能得到 {"{}":""}
方法3:自定义契约解析器(适配匿名类场景)
如果你坚持想用匿名类的写法,也可以通过自定义ContractResolver来把brackets替换成{}:
using Newtonsoft.Json; using Newtonsoft.Json.Serialization; public class CustomPropertyResolver : DefaultContractResolver { protected override string ResolvePropertyName(string propertyName) { // 把原属性名brackets替换成{} return propertyName == "brackets" ? "{}" : base.ResolvePropertyName(propertyName); } } // 调用方式: var anonymousObj = new { brackets = "" }; var serializerSettings = new JsonSerializerSettings { ContractResolver = new CustomPropertyResolver() }; string resultJson = JsonConvert.SerializeObject(anonymousObj, serializerSettings); // 最终输出 {"{}":""}
个人更推荐前两种方法,代码更简洁直接,第三种适合需要批量替换属性名或者必须保留匿名类结构的特殊场景。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

