2017-02-21 20 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, чтобы заполнить Street1 теми же данными, что и для Addresses.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); 
    } 

Fiddle: https://dotnetfiddle.net/MQmhNA

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^