Web Api возвращает пустой ответ - PullRequest
       12

Web Api возвращает пустой ответ

0 голосов
/ 07 сентября 2018

Я пытаюсь вернуться ниже модели из моего метода 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;
    }

Если я удалю DataContract из Modal, я получаю сообщение об ошибке ниже:

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

Обязательно ли использовать DataContract и DataMember, если у нас есть коллекция объектов в качестве свойства?

1 Ответ

0 голосов
/ 07 сентября 2018

Если вы используете 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, и все по-прежнему должно очень хорошо сериализоваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...