MongoDB: невозможно создать экземпляр , поскольку это абстрактный класс.C#

Место общения программистов C#
Ответить
Anonymous
 MongoDB: невозможно создать экземпляр , поскольку это абстрактный класс.

Сообщение Anonymous »

У меня есть следующие классы:

Код: Выделить всё

public abstract class Test { }

public class ConcreteTest1: Test
{
public string Foo {get; set; }
//...
}

public class ConcreteTest2: Test
{
public int AnInt { get; set; }
//...
}

public class TestScript
{
public ObjectId _id { get; set; } = new();
public string PartNumber { get; set; }
public IList Tests { get; set; } = [];
}
Я могу сохранить TestScript в MongoDB, но когда я пытаюсь его получить, я получаю сообщение

System.FormatException: «Произошла ошибка при десериализации свойства Tests класса TestScript: невозможно создать экземпляр Test, поскольку это абстрактный класс».

Мой документ MongoDB выглядит так:

Код: Выделить всё

{
"_id": {
"$oid": "6780467598922ae42e13a832"
},
"PartNumber": "1234-12345-12",
"Tests": [
{
"_t": "ConcreteTest1",
"Foo": "bar",
...
},
{
"_t": "ConcreteTest2",
"AnInt": 42
...
}
]
}
Мой код поиска выглядит так:

Код: Выделить всё

var collection = db.GetCollection("TestScripts");

var testScript = await collection.Find(ts => ts.PartNumber == partNumber).SingleOrDefaultAsync(cancellationToken);
return testScript?.Tests ?? [];
Как заставить десериализатор распознавать типы дочерних классов? Он вставляет имя типа как _t, поэтому должен быть способ его использовать, верно?
Это моя первая попытка использования MongoDB, поэтому, пожалуйста, дайте мне знать, если я в других отношениях я делаю это неправильно.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ract-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»