Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

993
Vistas
JsonSerializer.Deserialize está devolviendo un objeto vacío

Tengo un webapi que devuelve algo de Json:

 {"id":9,"businessName":"dummy","address":"pluto","products":[ {"id":762,"description":"Centralized needs-based website","price":1281.24,"stock":1600,"categories":[],"factory":null}, {"id":1027,"description":"Realigned 6th generation knowledge base","price":2398.16,"stock":19583,"categories":[],"factory":null}, {"id":1392,"description":"User-centric zero administration array","price":998.07,"stock":6124,"categories":[],"factory":null}, {"id":1800,"description":"Team-oriented reciprocal core","price":4422.95,"stock":17372,"categories":[],"factory":null}, {"id":2763,"description":"Sharable needs-based hierarchy","price":4122.98,"stock":17397,"categories":[],"factory":null}, {"id":6189,"description":"Re-engineered hybrid emulation","price":395.09,"stock":532,"categories":[],"factory":null} ]}

Luego trato de deserializar usando:

 using var response = await _httpClient.GetAsync($"{GetApiRouteFromEntity(entity)}/{entity.GetId()}"); response.EnsureSuccessStatusCode(); var responseContent = await response.Content.ReadAsStringAsync(); T? item = JsonSerializer.Deserialize<T>(responseContent);

pero esto me da una fábrica vacía con id 0 y todos los demás atributos en nulo

Fábrica.cs

 public class Factory : EntityBase { [DisplayName("ID")] public int Id { get; set; } [DisplayName("Nome Business")] public string? BusinessName { get; set; } [DisplayName("Indirizzo")] public string? Address { get; set; } [DisplayName("Prodotti")] public virtual ICollection<Product> Products { get; set; } public override string ToString() { return $"[{Id}] {BusinessName}"; } }

Producto.cs

 public class Product : EntityBase { [DisplayName("ID")] public int Id { get; set; } [DisplayName("Descrizione")] public string? Description { get; set; } [DisplayName("Prezzo")] public float Price { get; set; } [DisplayName("Magazzino")] public int Stock { get; set; } [DisplayName("Categorie")] public virtual ICollection<Category> Categories { get; set; } [DisplayName("Fabbrica")] public virtual Factory Factory { get; set; } public override string ToString() { return $"[{Id}] {Description}"; } }

EntityBase.cs

 public abstract class EntityBase { public virtual object GetId() { return GetType().GetProperty("Id").GetValue(this); } }

Supongo que es porque el accesorio de fábrica en los productos es nulo, pero no sé cómo solucionarlo.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

De los documentos :

De forma predeterminada, los nombres de propiedad y las claves del diccionario no se modifican en la salida JSON, incluido el caso.

Puede especificar la política de nomenclatura de propiedades:

 T? item = JsonSerializer.Deserialize<T>(responseContent, new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });

para usar mayúsculas y minúsculas para todos los nombres de propiedades JSON, o marque todas las propiedades necesarias con JsonPropertyNameAttibute que contenga el nombre correcto:

 public class Factory : EntityBase { [DisplayName("ID")] [JsonPropertyName("id")] // and so on public int Id { get; set; } .... }
over 4 years ago · Santiago Trujillo Denunciar

0

Las claves JSON son todas mayúsculas y minúsculas, pero los accesorios en sus clases están escritos en mayúsculas y minúsculas. Por ejemplo businessName vs. BusinessName . Por lo tanto, JsonSerializer no puede coincidir con ellos.

Puede inicializar el serializador de esta manera para ignorar las diferencias en la carcasa:

 var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true }; T? item = JsonSerializer.Deserialize<T>(responseContent, options);

Consulte los documentos para obtener más información: https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-character-casing

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda