Действие контроллера Asp.Net, возвращающее неожиданные данные JSON - PullRequest
0 голосов
/ 18 апреля 2019

Я смотрю на какой-то старый код и вижу то, что не могу понять. Код представляет собой действие контроллера, которое возвращает динамический объект:

return new
{
    Result = true,
    Count = data.Count(),
    Students = data.Select(s => string.Format("{0}, {1}", s.LastName, s.FirstName))
};

Однако полученный JSON в браузере не возвращается, как я ожидал:

{
    "$id":"1",
    "Result":true,
    "Count":1,
    "Students":
    {
        "$id":"2",
        "$values":["USER, ACTIVE"]
    }
}

То, что я ожидал, и то, что я обычно получаю в любое другое время, когда я делаю подобные вещи, больше похоже на это:

{
    "Result":true,
    "Count":1,
    "Students":
    {
        ["USER, ACTIVE"]
    }
}

Понятия не имею, откуда берутся свойства $ id и $ values. Я не видел, чтобы это случилось раньше с .Net, поэтому я не уверен, что является причиной этого. Это не возврат динамического объекта, который вызывает проблему, потому что я переключил его на именованный тип просто для проверки, и он все еще делает то же самое.

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Вам нужно добавить эту строку кода в Global.asax, чтобы избежать добавления $ id

    GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling 
= Newtonsoft.Json.PreserveReferencesHandling.None;
0 голосов
/ 18 апреля 2019

Вам нужно иметь .ToList () в конце учеников.

{
    Result = true,
    Count = data.Count(),
    Students = data.Select(s => string.Format("{0}, {1}", s.LastName, s.FirstName)).ToList()
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...