Почему ядро asp.net отправляет пустой объект в качестве ответа?
Когда я отлаживаю код в VS, список городов, который 9X_visual-c# я возвращаю, содержит 3 объекта вместе со 9X_c-sharp свойствами. Когда я вызываю эту конечную 9X_asp.net-5 точку, я получаю ответ из трех элементов 9X_angular списка пустых объектов.
Как решить эту проблему?
Класс модели:
public class City { public string CityName; public string AssociatedCities; public string Province; public int Status; public City(string cityName, string associatedCities, string province, int status) { this.CityName = cityName; this.AssociatedCities = associatedCities; this.Province = province; this.Status = status; } }
Конечная точка:
[HttpGet] [Route("cities")] public ActionResult> GetCities() { return Ok(Cities); }
Так 9X_asp.net-5 я вызываю конечную точку
getCities() { this.http.get('/api/wizard/cities') .subscribe(result => { console.log(result); this.cities = result; }, error => console.error('Something went wrong : ' + error)); }
Я получаю ответ:
Необходимый 9X_c-sharp ответ:
[ { "SearchCity": "Toronto", "AssociatedCities": "Ajax, Whitby, Toronto, Mississauga, Brampton", "Province": "ON", "Status": 1 }, { "SearchCity": "Vancouver", "AssociatedCities": "Vancouver, Vancouver City", "Province": "BC", "Status": 1 } ]
Я уже пробовал это: Fresh ASP.NET Core API returns empty JSON objects
- Пожалуйста, добавьт ...
Ответ #1
Ответ на вопрос: Почему ядро asp.net отправляет пустой объект в качестве ответа?
System.Text.Json
в настоящее время не поддерживает сериализацию 9X_angular4.x / десериализацию полей и конструкторов без 9X_asp-net-core параметров и не по умолчанию.
В вашем примере 9X_angularjs2 модели используются как поля, так и конструктор не по умолчанию. Если по 9X_aspnet-core какой-то причине вам нужно использовать 9X_angular4.x настраиваемый конструктор, вам нужно будет 9X_asp.net-core реализовать свой собственный JsonConverter
для поддержки 9X_c# этого. Этот документ может быть полезен 9X_aspnet-core для этого: https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-migrate-from-newtonsoft-how-to#deserialize-to-immutable-classes-and-structs
Поддерживаются только общедоступные свойства с общедоступными 9X_asp.net-core геттерами / сеттерами, а также конструктор без параметров по умолчанию (так называемый 9X_c#.net Plain_old_CLR_object (POCO)). Примечание. Если вы только сериализуете 9X_c-sharp (т.е. пишете), сеттеры обычно не должны 9X_aspnet-core быть общедоступными.
Properties отличаются от полей 9X_angular4.x (и содержат геттеры / сеттеры).
Вот исправление:
public class City { public string CityName { get; set; } public string AssociatedCities { get; set; } public string Province { get; set; } public int Status { get; set; } }
Ответ #2
Ответ на вопрос: Почему ядро asp.net отправляет пустой объект в качестве ответа?
В моем случае я просто добавил это в свой 9X_asp.net-5 метод ConfigureServices в Startup.cs (я 9X_c#.net использую Dot Net 5.0)
services.AddControllers().AddNewtonsoftJson();
Ответ #3
Ответ на вопрос: Почему ядро asp.net отправляет пустой объект в качестве ответа?
Исходя из того, что все ваше действие возвращает 9X_aspnet-core Cities
, который предположительно является свойством 9X_csharp или полем, определенным на вашем контроллере, я 9X_csharp собираюсь сделать снимок в темноте и предположить, что 9X_asp.net-core-webapi вы устанавливаете это в другой запрос и 9X_aspnet-core ожидаем, что он все еще будет там в этом 9X_angular запросе. Это не так. Контроллер создается 9X_asp.net-5 и удаляется с каждым запросом, поэтому все, что 9X_angular4 ему задано в течение времени жизни запроса, не 9X_angularjs2 сохранится. В результате Cities
ничего не содержит 9X_c-sharp в этом запросе, поэтому вы получите пустой 9X_angular ответ.
Если вам нужен список городов в действии, вы 9X_angularjs2 должны запросить их в этом действии. Кроме того, чего бы 9X_c# это ни стоило, System.Text.Json в настоящее 9X_angular2 время не поддерживает сериализацию полей, как 9X_asp.net-core-webapi другие упоминали в комментариях, но вместо 9X_angular этого вы все равно можете использовать JSON.NET, что 9X_angular2 делает. См .: https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.1&tabs=visual-studio#jsonnet-support
-
3
-
1
-
2
-
6
-
4
-
1
-
3
-
1
-
1
-
1
-
5
-
2
-
2
-
6
-
2
-
3
-
1
-
4
-
7
-
3
-
8
-
1
-
2
-
8
-
5
-
4
-
2
-
6
-
2
-
2
-
1
-
1
-
1
-
4
-
5
-
3
-
3
-
2
-
9
-
1
-
1
-
2
-
1
-
2
-
2
-
1
-
3
-
3
-
1
-
3