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"
    }
  ]
}
Другие вопросы по тегам