Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

376
Views
Llamar a Web api POST (abp appservice) con NodaTime LocalDate no se serializa

Estoy tratando de escribir una API web usando abp.io e implementando NodaTime . Cada vez que intento llamar a la acción POST, obtengo

Se detectaron los siguientes errores durante la validación.\r\n: el valor JSON no se pudo convertir a NodaTime.LocalDate.

He configurado NodaTime correctamente en el módulo, también lo probé en una api web .net 5 convencional y funciona correctamente.

Aquí está mi configuración:

 private void ConfigureNodaSerialization() { Configure<JsonSerializer>(options => { options.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb); //options.Converters.Add(NodaConverters.LocalDateConverter); }); }

Estoy usando NodaTime.Serialization.JsonNet

También probé NodaTime.Serialization.SystemTextJson sin éxito, con los mismos resultados.

..y aquí está el servicio de aplicaciones:

 [AllowAnonymous] public class NodaTestAppService : TestAppService, INodaTestAppService { public Task PostNodaTest([FromBody]NodaTestDto dto) { return Task.CompletedTask; } public Task GetNodaTest(NodaTestDto dto) { return Task.CompletedTask; } }

El GET está funcionando bien, el problema es con POST.

Este es el dto:

 public class NodaTestDto { public LocalDate Date { get; set; } public string NodaString { get; set; } }

Sospecho que el problema está en la serialización de Abp.

Tengo mi solución de prueba en github aquí .

Este es el curl para mi intento de solicitud:

rizo -X 'POST'
'https://localhost:44333/api/app/noda-test/noda-test'
-H' acepta: / '
-H 'Tipo de contenido: aplicación/json'
-H 'Token de verificación de solicitud: CfDJ8N-JsQhR2mhIqO-RkZtn61KwWgiFfjD60I0EMa07QTooLF9dC8LPmQEDtTws8MpTUtl8b0gtuE-NAiBAXxHEu8IyU8-4w0MfVB4IeZTRsWwXIgzc7pQYReLYnV1BIvp0ic
-d '{ "fecha": "1991-08-28", "nodaString": "cadena" }'

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

El código fuente de ABP muestra que Newtonsoft.Json se está configurando en MvcNewtonsoftJsonOptions (en lugar de JsonSerializer ):

 services.Configure<MvcNewtonsoftJsonOptions>(jsonOptions => { // configuration settings go here. }

Es posible que desee hacerlo de manera similar usando NodaTime.Serialization.JsonNet .

 private void ConfigureNodaSerialization(ServiceConfigurationContext context) { context.Services.Configure<MvcNewtonsoftJsonOptions>(options => { options.SerializerSettings.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb); }); }

Utilizo la siguiente referencia del paquete.

 <PackageReference Include="NodaTime.Serialization.JsonNet" Version="3.0.0" />

ACTUALIZAR

La documentación indica que ABP está utilizando un enfoque híbrido utilizando System.Text.Json y recurriendo a Newtonsoft.Json para tipos no admitidos; muestra cómo puede seguir usando Newtonsoft.Json para clases específicas o en todas partes.

Tomé el enfoque de usar solo Newtonsoft.Json para la clase NodaTestDto , junto con la configuración de NodaTime que se muestra arriba.

Su método ConfigureNodaSerialization dentro de su TestHttpApiHostModule debería verse como a continuación.

 private void ConfigureNodaSerialization() { // Use Newtonsoft.Json for NodaTestDto. Configure<AbpSystemTextJsonSerializerOptions>(options => { options.UnsupportedTypes.AddIfNotContains(typeof(NodaTestDto)); }); // Configure Nodatime (de)serialization. Configure<MvcNewtonsoftJsonOptions>(jsonOptions => { jsonOptions.SerializerSettings.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb); }); }

Ahora, al publicar una carga útil json { "date": "1991-08-28", "nodaString": "string" } usando la interfaz de usuario de Swagger , su NodaTestAppService recibe una instancia de LocalDate válida:

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!