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

729
Views
No se admite la deserialización de los tipos de interfaz en la solicitud de API

Recibo este mensaje de error System.NotSupportedException: No se admite la deserialización de los tipos de interfaz.

mientras llama a una API que tomó la solicitud como se indica a continuación.

ejemplo

 [HttpPost] public IActionResult AddSomeData(MyClass MyClass) { return Ok(); } public class MyClass : MyInterface { return Ok(); } public interface MyInterface { public string SomeOtherProperties { get; set; } public MyInterface Property { get; set; } //Or reference of any other interface }

He probado ejemplos dados en línea, como crear una clase concreta y agregar un atributo sobre la propiedad. Pero no está ayudando.

Como solución, eliminé la propiedad pública MyInterface { get; colocar; } y agregó la propiedad pública MyClass { get; colocar; }

¿Alguna solución mejor para esto?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

El problema de deserializar a una interfaz es que se pierde información

 public class MyClass : MyInterface { public string SomeOtherProperties { get; set; } public MyInterface Property { get; set; } public string importantString { get; set; } = "Don't lose me please"; } public interface MyInterface { string SomeOtherProperties { get; set; } MyInterface Property { get; set; } }

Tome el ejemplo anterior, tratar de deserializar a la interfaz implicaría decirle al deserializador que solo conozca las propiedades en la interfaz, y cualquier otro campo que su usuario final esté proporcionando se eliminará por completo. Además de eso, es posible que tenga métodos en la clase concreta que admitan las propiedades de la interfaz que deben existir.

Hay algunas opciones relacionadas con la reflexión que podría usar si necesita que la API admita múltiples implementaciones de una interfaz, pero la pregunta es ¿por qué necesita la interfaz en primer lugar? Se supone que una API define claramente lo que debe proporcionar el usuario, abstraer eso con una interfaz que debe ser implementada por alguna clase concreta misteriosa parece una mala idea.

Editar: si todo lo que necesita es la información compartida y no hay nada sofisticado, puede usar MyInterface como una clase estándar

 public class MyClass : MyInterface { public string nonImportantString { get; set; } = "lose me"; } public class MyInterface { public string SomeOtherProperties { get; set; } public MyInterface Property { get; set; } }

Al hacerlo, su API está limpia y puede deserializar bien

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!