Я получил следующий документ JSON:
{
"Title": "jkdjdjd",
"Description": "dkfkkdd",
"Actions": [{
"ActionType": "Email",
"Subject": "Bkdfkdk",
"Body": "kddkdkkd"
}, {
"ActionType": "SMS",
"PhoneNumber": "+46333333"
}
]
}
Мои классы выглядят так:
public class Trigger
{
public string Name { get; set; }
public string Description { get; set; }
public List<Action> Actions { get; set; }
}
public class Action
{
public string ActionType { get; set; }
}
public class EmailAction : Action
{
public string Subject { get; set; }
public string Body { get; set; }
}
public class SmsAction : Action
{
public string PhoneNumber { get; set; }
}
Итак, я в основном хочу, чтобы JSON.NET выбирал тип подкласса в зависимости от имени в «ActionType». Я знаю, что JSON.NET поддерживает специальное поле, которое можно использовать для идентификации подкласса. Но я предпочитаю, чтобы понятное имя определяло, какой класс генерировать.
Я понял, что должен использовать CustomCreationConverter<Action>
для выбора. Но я не могу понять, как читать это поле, не испортив реальную десериализацию.
Если это поможет, я мог бы использовать следующий макет:
public class Action
{
public string ActionType { get; set; }
public ActionData Data { get; set; }
}
public ActionData
{
}
public class EmailData : ActionData
{
public string Subject { get; set; }
public string Body { get; set; }
}
public class SmsData : ActionData
{
public string PhoneNumber { get; set; }
}
то есть JSON будет:
{
"Title": "jkdjdjd",
"Description": "dkfkkdd",
"Actions": [{
"ActionType": "Email",
"Data": {
"Subject": "Bkdfkdk",
"Body": "kddkdkkd"
}
}, {
"ActionType": "SMS",
"Data": {
"PhoneNumber": "+46333333"
}
}
]
}
Title
, а ваш классTrigger
имеет свойствоName
. Я думаю, что они должны иметь одно и то же имя свойства. - person Kevin Brechbühl   schedule 23.02.2014