2014-04-01 16 views
0
public interface ISurvey 
{ 
    List<ISurveyItem> Items { get; set; } 
    int QueueId { get; set; } 
    SurveyType Type { get; set; } //an enum 

    SurveyResult ToSurveyResult(); 
    void CopyToSurveyDto(Survey dbsurvey); 
} 

public interface ISurveyItemBase 
{ 
    int Sequence { get; set; } 
    string Template { get; set; } 
    string Label { get; set; } 
    int Id { get; set; } 
} 

public interface ISurveyItem:ISurveyItemBase 
{ 
    SurveyItemType Type { get; set; }//an enum 
    string Value { get; set; } 
} 

public class Survey : ISurvey 
{ 
    public List<ISurveyItem> Items { get; set; } 
    public int QueueId { get; set; } 
    public SurveyType Type { get; set; } 

    public SurveyResult ToSurveyResult() 
    { 
     //implimentation 
    } 

    public void CopyToSurveyDto(Data.Survey dbsurvey) 
    { 
     //implimentation 
    } 
} 

當我嘗試通過POST將Survey對象傳遞給我的Web API服務時,Items屬性被序列化爲一個空列表。我想這與它不知道什麼具體類型來序列化項目。有沒有關於如何做到這一點的指針?將基於接口的屬性傳遞給Web API

+0

什麼是'ISurveyItem'的定義是什麼? –

+0

一個可能的答案[這裏](http://stackoverflow.com/questions/15880574/json-net-how-to-deserialize-collection-of-interface-instances)。 –

+0

爲您添加ISurveyItem界面。該鏈接看起來像是答案的路徑,我只是不知道如何在我的Web API方法上實現該鏈接。 –

回答

0

爲了做到這一點,我不得不重構一點點:

public interface ISurvey<T> 
    where T: ISurveyItem 
{ 
    List<T> Items { get; set; } 
    int QueueId { get; set; } 
    SurveyType Type { get; set; } 
} 

public class Survey : ISurvey<SurveyItem> 
{ 
    public List<SurveyItem> Items { get; set; } 
    public int QueueId { get; set; } 
    public SurveyType Type { get; set; } 
} 

credit source