我们正在将一个对象序列化为JSON,该JSON具有的属性是动态对象的数组,例如:
public List<dynamic> Widgets { get; set; }
public string Name {get;set;}
根据this post的建议,将序列化设置为使用内置的驼峰式案例解析器,并且将ProcessDictionaryKeys选项设置为true:
var contractResolver = new CamelCasePropertyNamesContractResolver();
contractResolver.NamingStrategy.ProcessDictionaryKeys = true;
jsonSerializerSettings.ContractResolver = contractResolver;
但是,结果JSON保留了该字段中条目的pascal大小写(这是对象在数据库中的存储方式)。所有其他属性都将按预期转换为驼峰大小写。
以上示例输出:
{
name:"test",
widgets:[{Name:"Widget1",Description:"A nice widget"}]
}
那为什么命名策略仅适用于强类型C#对象而不适用于这些动态值?
我已经证实了显而易见的事情,即确保已应用序列化设置。
答案 0 :(得分:0)
感谢dbc的帮助。
万一其他人遇到了问题,问题在于底层对象是JObject,出于某种原因,我认为它是ExpandoObject。
JSON.net将不遵守JObjects的命名约定,它们按原样序列化,因此您必须提供一些解决方案来手动转换对象键。
根据这篇文章,我选择了一个自定义对象转换器:How to serialize a JObject the same way as an object with Json.NET?