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



我们正在将一个对象序列化为 JSON,该对象具有一个动态对象数组的属性,例如:

public List<dynamic> Widgets { get; set; }
public string Name {get;set;}

序列化设置为使用内置的驼峰大小写解析器,选项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# 对象,而不适用于这些动态值呢?

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

感谢 dbc 的帮助。

万一其他人有问题,问题是底层对象是一个 JObject - 出于某种原因,我认为它将是一个 ExpandoObject。

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

根据这篇文章,我选择了一个自定义对象转换器:如何以与使用 Json.NET 的对象相同的方式序列化 JObject?

相关内容

  • 没有找到相关文章

最新更新