【问题标题】:Passing interface based property to Web API将基于接口的属性传递给 Web API
【发布时间】:2014-04-02 22:01:00
【问题描述】:
 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 将调查对象传递给我的 Web API 服务时,Items 属性被序列化为一个空列表。我想这与它不知道序列化项目的具体类型有关。有没有关于如何做到这一点的指示?

【问题讨论】:

  • ISurveyItem的定义是什么?
  • 一个可能的答案here
  • 为您添加了 ISurveyItem 界面。该链接确实看起来像是答案的路径,我只是不知道如何在我的 Web API 方法上实现它。

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


【解决方案1】:

为了完成这个,我不得不稍微重构一下:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    相关资源
    最近更新 更多