Атрибут JsonIgnore поддерживает сериализацию свойств в ASP.NET Core 3.

Недавно я обновил свой проект API до ASP.NET Core 3. С тех пор атрибуты [JsonIgnore] не работают:

public class Diagnostico
{
    [JsonIgnore]
    public int TipoDiagnostico { get; set; }

    [JsonIgnore]
    public int Orden { get; set; }

    [JsonIgnore]
    public DateTime? FechaInicio { get; set; }

    public string TipoCodificacion { get; set; }

    public string Codigo { get; set; }

    public string Descripcion { get; set; }
}

Все свойства классов сериализуются. Конечные точки API находятся в .NET Core 3, но вся логика — в .NET Standard 2.1. Я понял, что сериализатор изменился с Newtonsoft.Json на System.Text.Json. Этот пакет недоступен в .NET Standard 2.1 (он работает только в .NET Core), поэтому для использования [JsonIgnore] в моделях внутри проектов .NET Standard я использую Newtonsoft.Json .


person mattinsalto    schedule 22.10.2019    source источник


Ответы (2)


[JsonIgnore] — это атрибут JSON.NET, который не будет использоваться новым сериализатором System.Text.Json.

Поскольку ваше приложение представляет собой ASP.NET Core 3.0, System.Text.Json будет использоваться по умолчанию. Если вы хотите продолжать использовать аннотации JSON.NET, вы должны использовать JSON.NET в ASP.NET Core 3.

Это так же просто, как добавить .AddNewtonsoftJson() в ваш MVC или WebApi Builder.

services.AddMvc()
    .AddNewtonsoftJson();

or

services.AddControllers()
    .AddNewtonsoftJson();

для приложений, подобных WebAPI.

person Tseng    schedule 22.10.2019
comment
Хорошо, даже если у вас может быть AddNewtonsoftJson() в качестве метода, он бесполезен, если вы явно не добавите nuget Microsoft.AspNetCore.Mvc.NewtonsoftJson в свой проект. Потерял час, узнавая это! - person CodeHacker; 30.10.2019
comment
System.Text.Json также имеет собственный встроенный атрибут JsonIgnoreAttribute с тем же именем класса. docs.microsoft. com/en-us/dotnet/api/ также доступен в nuget nuget. org/packages/System.Text.Json - person Laksmono; 28.02.2020

Для вашего проекта .Net Standard возьмите пакет System.Text.Json из nuget.

https://www.nuget.org/packages/System.Text.Json

поэтому вы можете использовать System.Text.Json.Serialization.JsonIgnoreAttribute вместо Newtonsoft.Json.JsonIgnoreAttribute.

person Laksmono    schedule 27.02.2020