将具有列表的对象传递给Web API
问题描述:
我无法通过JSON将对象列表传递给Web Api。将具有列表的对象传递给Web API
的方法:
public HttpResponseMessage SubmitCourierRequest([FromBody]CRRequest request)
{
//code goes here
}
的CRRequest对象:
public class CRRequest
{
public List<MediaItem> MediaItems = new List<MediaItem>();
public DistributionList DistributionList { get; set; }
public string SendTo { get; set; }
public string Subject { get; set; }
public string Comments { get; set; }
}
媒体项目类:
public abstract class MediaItem : INotifyPropertyChanged
{
[DataMember]
public virtual string ID { get; set; }
[DataMember]
public double Longitude { get; set; }
[DataMember]
public double Latitude { get; set; }
[DataMember]
public int AgencyID { get; set; }
...
}
的JSON我传递:
{
"SendTo": "[email protected]",
"Subject": "asda",
"Comments": "asdasd",
"ExpirationDate": "2016-11-01",
"DistributionList": {
"DistributionListID": "4"
},
"MediaItems": [{
"ID": "001"
},
{
"ID": "002"
}]
}
当我调试该方法时,除了媒体项目之外,我可以得到所有内容,这使我计数为0。
答
它的因为MediaItem
被标记为抽象,所以它不能被实例化,因为底层的具体类型在通话时是未知的。
您是否可以使用具体类型(最简单/最快的解决方案)?否则,你将不得不提供一个活页夹,可以根据原始json(或其他)来识别正确的类型。如果您使用json.net
,请参阅Deserializing JSON to abstract class。
“MediaItem”类是什么样的? –
@MattRowland对原始文章增加了课程。 – javisrk
它因为'MediaItem'被标记为抽象的,所以它不能被实例化,因为底层的具体类型在通话时是未知的。你有具体的类型,你可以使用(最简单/最快的解决方案)?否则,你将不得不提供一个活页夹,可以根据原始json(或其他)来识别正确的类型。如果您使用的是json.net,请参阅http://*.com/q/20995865/1260204。 – Igor