Newtonsoft Json将Complex类型反序列化为Flat基本类型

时间:2017-02-21 15:54:52

标签: c# json serialization json.net

我有一个使用JSonConvert反序列化的类:

public class TaskEntity{
    [Ignore]
    public Address Addresses { get; set; }
    [JsonProperty(PropertyName = "Addresses.Street1")]
    public string Street1 { get; set; }
    public string Street2 { get; set; }
    public string Number { get; set; }
    public string Box { get; set; }
    public string ZipCode { get; set; }
    public string City { get; set; }
    public string Country { get; set; }
}
public class Address
{
    public string Street1 { get; set; }
    public string Street2 { get; set; }
    public string Number { get; set; }
    public string Box { get; set; }
    public string ZipCode { get; set; }
    public string City { get; set; }
    public string Country { get; set; }
    public override string ToString()
    {
        return string.Format("{0} {1}{2}, {3} {4}, {5}",
            Street1,
            Number,
            (string.IsNullOrEmpty(Box) ? "" : " " + Box),
            ZipCode,
            City,
            Country);
    }
}

实际上,当我反序列化对象时,地址填充数据,我正在寻找一种方法告诉JsonConvert使用与Addresses.Street1相同的数据填充Street1。

这里我尝试使用JsonProperty(PropertyName =“Addresses.Street1”),但它不起作用。

我尝试使用Custom JsonConverter,但无法确定如何制作它。 我希望有一些通用的东西可以应用于所有具有Address类型属性的类。

我的单元测试非常简单:

[TestMethod]
    public void JsonConvert_CustomResolver_ShouldConvertAddressTypeToFlatBasicProperties()
    {
        var tasksSerialized = JsonConvert.SerializeObject(new TaskEntity
        {
          Addresses  = new Address
          {
              Street1 = LocationFaker.Street()
          }
        });
        Console.Write(tasksSerialized);

        var taskEntities = JsonConvert.DeserializeObject<TaskEntity>(tasksSerialized);
        Assert.IsNotNull(taskEntities.Street1);
    }

小提琴:https://dotnetfiddle.net/MQmhNA

1 个答案:

答案 0 :(得分:0)