【问题标题】:Passing a object with a list to Web API将带有列表的对象传递给 Web API
【发布时间】:2016-10-03 18:39:24
【问题描述】:

我无法通过 JSON 将对象列表传递给 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": "bob@bob.com",
    "Subject": "asda",
    "Comments": "asdasd",
    "ExpirationDate": "2016-11-01",
    "DistributionList": {
        "DistributionListID": "4"
    },
    "MediaItems": [{
        "ID": "001"
    }, 
    {
        "ID": "002"
    }]
}

当我调试该方法时,我可以获得除媒体项之外的所有内容,这使我的计数为 0。我在这里遗漏了什么吗?

【问题讨论】:

  • MediaItem 类是什么样的?
  • @MattRowland 为原始帖子添加了课程。
  • 这是因为MediaItem 被标记为抽象,所以它不能被实例化,因为在调用时底层的具体类型是未知的。您是否有可以使用的具体类型(最简单/最快的解决方案)?否则,您将必须提供一个活页夹,该活页夹可以根据原始 json(或其他内容)识别正确的类型。如果您使用的是 json.net,请参阅stackoverflow.com/q/20995865/1260204
  • @Igor Doh。就是这样。丹克。

标签: c# json asp.net-web-api2


【解决方案1】:

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

您是否有可以使用的具体类型(最简单/最快的解决方案)?否则,您将必须提供一个活页夹,该活页夹可以根据原始 json(或其他内容)识别正确的类型。如果您使用的是json.net,请参阅Deserializing JSON to abstract class

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    相关资源
    最近更新 更多