我需要JSON.NET中的类版本支持



我正在使用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.ObjectsTypeNameAssemblyFormat = 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

我实际上尚未测试过此代码,所以请让我知道如果情况不清楚

相关内容

  • 没有找到相关文章

最新更新