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:
-
Instale el paquete Microsoft.AspNetCore.Mvc.NewtonsoftJson NuGet.
-
En
ConfigureServices()
agregar una llamada aAddNewtonsoftJson()
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/