2016-10-03 3 views
0

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://stackoverflow.com/q/20995865/1260204を参照してください。 – Igor

答えて

2

その理由はMediaItemが抽象としてマークされているため、呼び出し時に基礎となる具体的な型が不明なためインスタンス化できません。

代わりに使用できる具体的なタイプ(最も簡単な/最も速いソリューション)がありますか?それ以外の場合は、生のjson(または何か他のもの)に基づいて正しいタイプを識別できるバインダーを提供する必要があります。 json.netを使用している場合は、Deserializing JSON to abstract classを参照してください。

関連する問題