Saltar al contenido

El atributo DataMember no se respeta en dotnet core 3.0

Solución:

Asp.Net Core 3 no es compatible [DataContract], [DataMember] de forma predeterminada y no parece que lo vayan a agregar pronto en función de este problema de Github

Compatibilidad de System.Text.Json con System.Runtime.Serialization

Si desea volver al valor predeterminado anterior de usar Newtonsoft.Json, que respeta esos atributos, tendrá que hacer lo siguiente:

  1. Instale el paquete Microsoft.AspNetCore.Mvc.NewtonsoftJson NuGet.

  2. En ConfigureServices() agregar una llamada a AddNewtonsoftJson()

public void ConfigureServices(IServiceCollection services) {
    //...

    services.AddControllers()
        .AddNewtonsoftJson(); //<--

    //...
}

A partir de .NET Core 3.0 RC1, el System.Text.Json la biblioteca no tiene soporte para System.Runtime.Serialization atributos. Puede encontrar un problema en GitHub que está rastreando esta omisión, pero en este momento no parece que haya ninguna intención de cambiar eso.

Opción 1: Newtonsoft.Json

Lo que puede hacer mientras tanto es cambiar a usar Newtonsoft.Json como el serializador JSON para ASP.NET Core 3.0 que debería restaurar esta funcionalidad (a costa de no aprovechar el System.Text.Json analizador que es un poco más rápido).

Primero, agregue una referencia al Microsoft.AspNetCore.Mvc.NewtonsoftJson paquete en su proyecto:

<Project Sdk="Microsoft.NET.Sdk.Web">
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" />
  </ItemGroup>
</Project>

Y luego llame a la extensión de su colección de servicios.

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers()
            .AddNewtonsoftJson();
}

Opción 2: Utilice System.Text.Json.Serialization

Por otro lado, si está contento de definir sus modelos sin System.Runtime.Serialization atributos y utilice el System.Text.Json.Serialization atributos en su lugar, puede hacer lo siguiente:

using System.Text.Json.Serialization;
namespace WebApplication17.Models
{
    public class TestData
    {
        [JsonPropertyName("testaction")]
        public string Action { get; set; }
    }
}

Puede encontrar la lista completa de atributos admitidos aquí: https://docs.microsoft.com/en-us/dotnet/api/system.text.json.serialization.jsonpropertynameattribute?view=netcore-3.0

Agregar [JsonPropertyName("testaction")] atribuir a la Action propiedad. Esto debería solucionar tu problema.

Consulte aquí para obtener más información: https://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-apis/

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *