【发布时间】:2014-02-22 21:31:22
【问题描述】:
我得到了以下 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"
}
}
]
}
【问题讨论】:
-
没有回答您的问题,但是在您的 JSON 根节点中,您拥有
Title属性,而您的Trigger类拥有Name属性。我认为这些应该具有相同的属性名称。
标签: c# json.net asp.net-web-api2