Я хочу превратить плоскую строку json в модель, целевой класс имеет подклассы, а плоский json имеет все объекты подкласса с префиксом; например "{имя класса}.{свойство}".
{
"FirstName": "Joey",
"LastName": "Billy",
"EmploymentDetails.JobTitle": "JobTitle",
"EmploymentDetails.StartDate": "2015-01-01T00:00:00",
"ContactDetails.HouseNumberName": "10",
"ContactDetails.Road": "Road"
}
Это мой целевой класс:
public class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual EmploymentDetails EmploymentDetails { get;set;}
public virtual ContactDetails ContactDetails { get;set;}
}
public class EmploymentDetails {
public string JobTitle { get; set; }
public DateTime StartDate { get; set; }
}
public class ContactDetails {
public string HouseNumberName { get; set; }
public string Road { get; set; }
}
Я пробовал следующее:
public static void main() {
var json = @"{""FirstName"": ""Joey"",""LastName"": ""Billy"",""EmploymentDetails.JobTitle"": ""JobTitle"",""EmploymentDetails.StartDate"": ""2015-01-01T00:00:00"",""ContactDetails.HouseNumberName"": ""10"",""ContactDetails.Road"": ""Road"",}";
//try using AutoMapper
Mapper.CreateMap<string,Person>();
var personModel = Mapper.Map<Person>(json);
//just returns null values
//try using Newtonsoft
personModel = Newtonsoft.Json.JsonConvert.DeserializeObject<Person>(json);
//fills values but obviously returns no nested data
}
Я знаю, что Automapper имеет RecognizePrefix и RecognizeDestinationPrefix, но AutoMapper, кажется, заботится только о том, находится ли он в исходном объекте, а не в подклассе.
Потенциально я мог бы взять свою строку JSON и сделать ее словарем, но даже тогда я не знаю, как сопоставить ее с моделью с подклассами.
Была надежда, что у меня может быть бесконечное количество подклассов, а строка JSON может просто сопоставить плоскую модель JSON с моделью.