2017-02-21 102 views
1

我有一個使用JSonConvert反序列化類:Newtonsoft Json的反序列化複雜類型來平基本型

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」),但它不起作用。

我嘗試過使用自定義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

回答

相關問題