У меня есть класс, который десериализованное с помощью 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