2

私がそのような構造を持っているとしましょう

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

Field クラスは合成することができ、クラスから派生した他の Field も含めることができるFieldので、ある種の階層構造を持っています。フォームはしっかりしたドキュメントとして RavenDB に永続化され、正常に動作します。RavenDB からインスタンスを取得することについて疑問に思っていFormます。Raven に適切なクラス (クラスから派生したFieldクラス) を作成してもらいたいのです。では、2 つの派生クラスがFieldDerived1あり、それらを取得した後にそれらを のコレクションにFieldDerived2入れる場合、実際の型を持つ 2 つの要素と、これらのクラスに追加したすべての追加プロパティが必要だとしましょう。FieldsFormFieldDerived1FieldDerived2

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 に答える