将带有列表的对象传递给Web API

本文关键字:Web API 对象 列表 | 更新日期: 2023-09-27 18:11:23

我在通过JSON向Web Api传递对象列表时遇到麻烦。

方法:

public HttpResponseMessage SubmitCourierRequest([FromBody]CRRequest request)
{
    //code goes here
}

请求对象:

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": "bob@bob.com",
    "Subject": "asda",
    "Comments": "asdasd",
    "ExpirationDate": "2016-11-01",
    "DistributionList": {
        "DistributionListID": "4"
    },
    "MediaItems": [{
        "ID": "001"
    }, 
    {
        "ID": "002"
    }]
}

当我调试该方法时,我可以得到除了媒体项之外的所有内容,这给了我一个0的计数。我遗漏了什么吗?

将带有列表的对象传递给Web API

这是因为MediaItem被标记为抽象,所以它不能被实例化,因为底层的具体类型在调用时是未知的。

你有一个具体的类型可以代替(最简单/最快的解决方案)吗?否则,您将不得不提供一个绑定器,它可以根据原始json(或其他东西)识别正确的类型。如果您使用的是json.net,请参阅反序列化JSON抽象类