将具有列表的对象传递给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。

+2

“MediaItem”类是什么样的? –

+0

@MattRowland对原始文章增加了课程。 – javisrk

+4

它因为'MediaItem'被标记为抽象的,所以它不能被实例化,因为底层的具体类型在通话时是未知的。你有具体的类型,你可以使用(最简单/最快的解决方案)?否则,你将不得不提供一个活页夹,可以根据原始json(或其他)来识别正确的类型。如果您使用的是json.net,请参阅http://*.com/q/20995865/1260204。 – Igor

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

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