超全模态模型 × Harness 升级,升级解锁 ArkClaw,最新支持 DeepSeek-V4 系列与 GLM-5.1
我懂你遇到的问题——用Json.NET序列化存放在List<object>里的匿名对象时,大概率会得到空对象或者不完整的JSON,对吧?这其实是C#匿名类型的特性导致的,咱们一步步解决:
List<object>
C#的匿名类型是编译器自动生成的internal密封类,它的属性也是internal访问级别。当你把这些匿名对象塞进List<object>后,Json.NET默认的契约解析器只会查找public成员,根本识别不到这些internal属性,自然序列化不出正确内容。
public
如果不需要依赖List<object>的泛型特性,直接用var声明集合,让编译器自动推断匿名类型的实际类型,Json.NET能直接正确处理:
var
// 用数组或编译器推断类型的集合存储匿名对象 var collection = new[] { new { FirstSetting = new { FirstKEy = "Property vs Inspections", color = "#FF6384", fontStyle = "Arial", sidePadding = 10 } }, new { AnotherSettings = new { text = "another text", color = "#FF6384", fontStyle = "Arial", sidePadding = 10 } } }; // 直接序列化,无需额外配置 string json = JsonConvert.SerializeObject(collection, Formatting.Indented);
这种方式最省心,编译器会帮你匹配匿名类型的真实结构,Json.NET能直接识别所有属性,生成完整的JSON。
如果业务场景要求必须使用List<object>,那我们需要修改Json.NET的序列化设置,让它能识别internal成员:
// 配置序列化规则,允许访问非公共成员 var settings = new JsonSerializerSettings { ContractResolver = new DefaultContractResolver { // 设置成员搜索标志,包含public和non-public(internal属于non-public) DefaultMembersSearchFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance, // 可选:如果需要驼峰命名,保留此设置;不需要则删除 NamingStrategy = new CamelCaseNamingStrategy() }, Formatting = Formatting.Indented // 可选,格式化输出方便查看 }; var collection = new List<object>() { new { FirstSetting = new { FirstKEy = "Property vs Inspections", color = "#FF6384", fontStyle = "Arial", sidePadding = 10 } }, new { AnotherSettings = new { text = "another text", color = "#FF6384", fontStyle = "Arial", sidePadding = 10 } } }; string json = JsonConvert.SerializeObject(collection, settings);
这段代码通过DefaultContractResolver修改了成员搜索规则,让Json.NET可以读取匿名类型的internal属性,从而生成正确的JSON。
DefaultContractResolver
不管用哪种方案,最终生成的JSON应该是这样的(格式化后):
[ { "FirstSetting": { "FirstKEy": "Property vs Inspections", "color": "#FF6384", "fontStyle": "Arial", "sidePadding": 10 } }, { "AnotherSettings": { "text": "another text", "color": "#FF6384", "fontStyle": "Arial", "sidePadding": 10 } } ]
内容的提问来源于stack exchange,提问作者Krish
超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起
模型再升级,30秒超长叙事, 模态参考扩容
模型自由,工具不限,最新支持 Deepseek-V4 系列、GLM-5.3 系列
超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列
大模型19元起,Al应用9.9元畅享,新人首购爆款尽享优惠