C# 使用Json.NET自定义映射
我正在尝试映射JSON,它看起来像C# 使用Json.NET自定义映射,c#,json,serialization,json.net,C#,Json,Serialization,Json.net,我正在尝试映射JSON,它看起来像 "ids": { "id": { "@value":"6763754764235874140" } } 我想把它映射到几个类上 class Property { public Ids Ids { get; set; } } class Ids { public string Id { get; set; } } 所以基本上我想把JSON文档中ids/id/@value的值填充到类架构中的ids.id。通过浏
"ids": {
"id": {
"@value":"6763754764235874140"
}
}
我想把它映射到几个类上
class Property
{
public Ids Ids { get; set; }
}
class Ids
{
public string Id { get; set; }
}
所以基本上我想把JSON文档中ids/id/@value
的值填充到类架构中的ids.id
。通过浏览文档,我想我可以使用
[JsonProperty(ItemConverterType=typeof(IdConverter))]
public string Id { get; set; }
并提供名为
IdConverter
的自定义JsonConverter
子类。但是,当我这样做时,我的IdConverter.ReadJson
永远不会被调用。我做错了什么?看起来答案是ItemConverterType
用于转换数组中的项。使用JsonProperty
和JsonConverter
属性对属性进行双重注释可以工作:
[JsonProperty(PropertyName="id")]
[JsonConverter(typeof(IdConverter))]
public string Id { get; set; }
您的属性名为
Id
,但在json中为Id
。这可能是一个case
问题原来Json.NET足够聪明,可以将ids
反序列化到ids
属性中,尽管它在序列化时会尊重case,除非你告诉它不要这样做。但是我也遇到了同样的问题,使用JsonProperty
。我将其更改为JsonConverter
,并且它正在工作,不需要额外的JsonProperty
属性。可能只是旧版本中的一个bug,但在最新版本(特别是v4)中,您可以只使用JsonConverter
我已经有一段时间没有处理这个问题了,但我相信JsonProperty
属性是序列化Id
所必需的(大写第一个字母)进入名为id
(小写)的JSON字段。新版本在没有额外属性的情况下是否能正确处理此问题?看起来好像是这样,是的。我认为这可能更像是默认序列化程序设置中的一个配置项,而在较新版本中,它改变了这一点JsonConvert.SerializeObject(new MyClass())
开箱即用的似乎是“原样”的可序列化类属性名称。