【问题标题】:Web Api returning empty responseWeb Api 返回空响应
【发布时间】:2019-02-13 03:13:05
【问题描述】:

我正在尝试从我的 api 方法返回以下模型,但它返回的是空响应。

[DataContract]
    public class MasterData
    {
        public IEnumerable<PROFILE> lstProfile { get; set; }
        public IEnumerable<COMPETENCE> lstCOMPETENCE { get; set; }
        public IEnumerable<TB> lstTB { get; set; }

        public MasterData() { }

    }

回应:

<MasterData xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/WB.Q.Models"/>

当我调试 web api 方法时,我可以在 return 语句中看到正确形成的响应,但我没有得到它作为响应

动作

[HttpGet]
[Route("api/Common/AllMasterData")]
public MasterData GetAllMasterData()
{
    MasterData mstrData=new MasterData();
    mstrData = Helper.GetAllMasterData();

    return mstrData;
}

辅助方法

    internal static MasterData GetAllMasterData()
    {
        MasterData masterData = new MasterData();

        DataSet ds = DBHelper.GetData("aaa", null);
        List<COMPETENCE> lstCompetence = new List<COMPETENCE>();
        if (ds != null && ds.Tables.Count > 0)
        {
            foreach (DataRow drow in ds.Tables[0].Rows)
            {
                        Adding in list
            }
        }
        masterData.lstCOMPETENCE = lstCompetence;

        ds = DBHelper.GetData("bbb", null);
        List<PROFILE> lstPROFILE = new List<PROFILE>();
        if (ds != null && ds.Tables.Count > 0)
        {
            foreach (DataRow drow in ds.Tables[0].Rows)
            {
                                   Adding in list
            }
        }
        masterData.lstProfile = lstPROFILE;

        ds = DBHelper.GetData("zzz", null);
        List<TBSite> lstTBSite = new List<TBSite>();
        if (ds != null && ds.Tables.Count > 0)
        {
            foreach (DataRow drow in ds.Tables[0].Rows)
            {
               Adding in list
            }
        }
        masterData.lstTBSite = lstTBSite;

        return masterData;
    }

如果我从 Modal 中删除 DataContract,我会遇到以下错误:

The 'ObjectContent`1' type failed to serialize the response body for content type 'application/xml; charset=utf-8'.

如果我们将对象集合作为属性,是否必须使用 DataContract 和 DataMember?

【问题讨论】:

  • 动作是什么?

标签: c# asp.net asp.net-mvc-4 asp.net-web-api


【解决方案1】:

如果您像这样使用DataContract,那么我相信您还需要在回复中使用DataMember 标记您想要的所有内容:

[DataContract]
public class MasterData
{
    [DataMember]
    public IEnumerable<PROFILE> lstProfile { get; set; }

    [DataMember]
    public IEnumerable<COMPETENCE> lstCOMPETENCE { get; set; }

    [DataMember]
    public IEnumerable<TB> lstTB { get; set; }

    public MasterData() { }

}

我自己也犯过这个错误......大概有六次了:)

或者,您可以省略 DataContract 属性,所有内容都应该可以正常序列化。

【讨论】:

  • 我认为我们不需要为 webapi 指定 datacontract 和 datamember
  • @JEMI - 我认为你是对的,但如果你指定 DataContract,那么我相信你也必须使用 DataMember。
  • 我是否需要将 DataMember 添加到每个类(模态),例如 TB、Profile?
  • @F11 我建议你从你的类中删除 DataContract ,Web API 将在内部处理。
  • @F11 - 如果这些类也标有 DataContract,那么可以。或者,您可以完全省略 DataContract 属性,并且所有内容都应该像 JEMI 提到的那样很好地序列化。
猜你喜欢
  • 2018-07-09
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 2021-06-24
相关资源
最近更新 更多