我正在使用json.net版本4.5,我对json.net非常新。
问题:我需要知道如何在json.net中支持类的版本化。
示例:如下示例中给出,我在第二版中具有oplyeedetail类,名称属性是将属性分为firstName和lastname;单一地址成为地址。
我尝试使用自定义JSONCONVERTER在删除序列化对象时提供向后兼容性,但是我已经在使用多个转换器时遇到了问题,因为我已经使用了常见的自定义创建JSONCONVERTER,该jsonConverter将接口映射到Concretype,如下所示。
所示。 // Employee Detail Version 1.0
[JsonObject()]
public class EmployeeDetail
{
public EmployeeDetail()
{
}
public EmployeeDetail( string name )
{
Name = name;
}
[JsonProperty]
public string Name { get; set; }
[JsonConverterAttribute( typeof( CustomObjectCreationConverter<iAddress, Address> ) )]
public iAddress Address { get; set; }
}
// Employee Detail Version 2.0
[JsonObject()]
public class EmployeeDetail
{
public EmployeeDetail()
{
}
public EmployeeDetail( string firstName, string lastName )
{
FirstName = firstName;
LastName = lastName;
}
[JsonProperty]
public string FirstName { get; set; }
[JsonProperty]
public string LastName { get; set; }
[JsonConverterAttribute( typeof( CustomArrayCreationConverter<iAddress, Address> ) )]
public IEnumerable<iAddress> Addresses { get; set; }
}
将属性[jsonConverterAttribute]添加到属性并不是一个不错的选择。而不是尝试使用TypeNameHandling = TypeNameHandling.Objects
和TypeNameAssemblyFormat = FormatterAssemblyStyle.Full
。
JsonSerializerSettings
因此,在使用设置序列化之后,JSON字符串将包含标签"地址":{" $ type":" ...
您可以使用jobign.property("地址").value
获得它Var AddressValue = jObject.Property( "Address" ).Value
JsonTextReader textReader = new JsonTextReader( new StringReader( AddressValue.ToString() ) );
iAddress myAddress = serializer.Deserialize<iAddress>( textReader );
现在,如果地址对象没有更改,则它应该为您序列化,否则您也需要为此提供另一个转换器。
和这两个转换器都需要传递给DeserializeObject
。
我实际上尚未测试过此代码,所以请让我知道如果情况不清楚