动态数组的JSON.net命名约定

时间:2019-01-18 16:56:41

标签: c# json json.net

我们正在将一个对象序列化为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#对象而不适用于这些动态值?

我已经证实了显而易见的事情,即确保已应用序列化设置。

1 个答案:

答案 0 :(得分:0)

感谢dbc的帮助。

万一其他人遇到了问题,问题在于底层对象是JObject,出于某种原因,我认为它是ExpandoObject。

JSON.net将不遵守JObjects的命名约定,它们按原样序列化,因此您必须提供一些解决方案来手动转换对象键。

根据这篇文章,我选择了一个自定义对象转换器:How to serialize a JObject the same way as an object with Json.NET?