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

283
Vistas
Valor de discriminador desconocido MongoDB

Básicamente, quiero una colección que guarde varios tipos de objetos/documentos, pero todos heredan de una interfaz base. Sin embargo, sigo recibiendo esta excepción al cargar:

Additional information: An error occurred while deserializing the Inventory property of class Character: Unknown discriminator value 'TestItem'.

Aquí están mis códigos:

 public class Character { ... public List<IInventoryItem> Inventory { get; set; } ... } public interface IInventoryItem { ... } class TestItem : IInventoryItem { ... }

La ayuda es muy apreciada.

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

0

El problema es que no declara explícitamente sus tipos polimórficos en el controlador MongoDB.

Para eso, tiene dos opciones: usar atributos o un método de configuración de mapeo. Más información aquí:http://mongodb.github.io/mongo-csharp-driver/2.2/reference/bson/mapping/

Usando atributos:

 [BsonDiscriminator("TestItem")] public class TestItem : IInventoryItem { ... }

Usando el método de configuración de mapeo:

 BsonClassMap.RegisterClassMap<TestItem>(); // do it before you access DB

POR QUÉ: los documentos que representan tipos polimórficos (por ejemplo, interfaces) se guardan en la base de datos con un campo especial llamado _t , que contiene el valor del discriminador. En su caso, el documento de Character se verá así:

 { // ... other fields Inventory: [ { _t: "TestItem", //... other fields }, { _t: "TestItem", //... other fields } ] // ... other fields }

Al escribir, si las asignaciones no existen, se crean sobre la marcha y el discriminador TestItem se asigna a la clase TestItem . A partir de ese momento, las asignaciones existen durante la vida del AppDomain . Así, por ejemplo, si realiza lecturas después de escrituras, estará bien.

Pero si lee los datos a primera hora, el serializador BSON no sabe a qué tipo se asigna el discriminador TestItem . Por lo tanto, es una buena práctica especificar siempre explícitamente las asignaciones de discriminadores. De esta forma, también puede controlar los valores del discriminador; por defecto, son iguales al tipo de nombre.

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