RavenDB и композитный рисунок
Допустим у меня такая структура
public class Form
{
public List<Field> Fields { get; set; }
}
Класс Field может быть составным и включать другие поля, полученные из Field
класс, так что у меня есть какая-то иерархическая структура. Форма сохраняется в RavenDB как надежный документ и работает нормально. Мне просто интересно получить Form
экземпляр обратно из RavenDB, я хочу, чтобы Raven создал соответствующие классы (классы, которые являются производными от Field
учебный класс). Так скажем, если у меня есть два производных класса FieldDerived1
а также FieldDerived2
и положить их в Fields
коллекция Form
после их возврата я хочу иметь два элемента с реальными типами - FieldDerived1
а также FieldDerived2
со всеми дополнительными свойствами я добавил в эти классы?
1 ответ
Это будет работать просто отлично. Raven использует Json.Net для своей сериализации, которая добавит свойство $type к вашим данным, чтобы его можно было правильно десериализовать в правильный тип.
Предполагая, что ваши поля выглядят примерно так:
public class Field
{
public string Name {get; set;}
}
public class FieldDerived1 : Field
{
public int Length {get; set;}
}
public class FieldDerived2 : Field
{
public string Color {get; set;}
}
Ворон будет хранить класс Form следующим образом:
{
Fields: [
{
"$type": "YourNamespace.FieldDerived1, YourAssembly",
"Name": "foo",
"Length": 10
},
{
"$type": "YourNamespace.FieldDerived2, YourAssembly",
"Name": "bar",
"Color": "blue"
}
]
}