Web Api返回空响应

时间:2018-09-07 18:42:20

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

我正在尝试通过api方法返回低于模型的值,但它返回的是空响应。

function setFocusToTextBox(){
    document.getElementsByClassName("form-control ng-pristine ng-valid ng-scope ng-touched")[0]; element.focus();
}

响应:

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

        public MasterData() { }

    }

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

动作

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

辅助方法

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

    return mstrData;
}

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

    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;
    }

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

1 个答案:

答案 0 :(得分:2)

如果您使用的是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属性,一切仍然应该序列化。