2

假设我有这样的结构

public class Form
{
   public List<Field> Fields { get; set; }
}

Field 类可以是复合的,也可以包含从Field该类派生的其他 Field,所以我有某种层次结构。表单作为实体文档保存到 RavenDB 中,并且工作正常。我只是想知道Form从 RavenDB 获取实例,我希望 Raven 创建适当的类(类,派生自Field类)。因此,假设我有两个派生类FieldDerived1,并在取回它们后将FieldDerived2它们放入Fields集合中,我想要两个具有实际类型的元素 -以及我添加到这些类中的所有附加属性?FormFieldDerived1FieldDerived2

4

1 回答 1

5

它会工作得很好。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;}
}

Raven 将像这样存储 Form 类:

{
  Fields: [
    {
      "$type": "YourNamespace.FieldDerived1, YourAssembly",
      "Name": "foo",
      "Length": 10
    },
    {
      "$type": "YourNamespace.FieldDerived2, YourAssembly",
      "Name": "bar",
      "Color": "blue"
    }
  ]
}
于 2012-11-15T15:25:05.730 回答