1

定義されたモデルから既存のシリアライゼーション モデルにアクセスし、Contracted が未知のサブタイプを追加して、その後シリアライゼーションに使用することは可能ですか?

または、新しいモデルを明示的に作成する必要がありますか? つまり、この場合は ModuleTwoFoo の場合


アップデート

var model = TypeModel.Create();
model[typeof(IFooChild)].AddSubType(2, typeof(ModuleTwoFooChild));
model.CompileInPlace();

RuntimeModel.Default[] // model[] はアクセス ... Doh !

私の唯一の不満は...モデルを再生成するのではなく、元のモデルにアクセスしてその上に構築する方法があればいいのに

マークが述べたように、「基本的に必要なのはクローンされたが凍結されていないモデルです」


public interface IFoo
{
    int FooNumber { get; set; }
    IList<IFooChild> Children { get; set; }
}

[ProtoContract, ProtoInclude(1, typeof(ModuleOneFooChild))]
public interface IFooChild
{
    IFoo Foo { get; set; }
    string Detail { get; set; }
}

[ProtoContract]
public class ModuleOneFoo : IFoo
{
    [ProtoMember(1)]
    public int FooNumber { get; set; }

    [ProtoMember(2)]
    public IList<IFooChild> Children { get; set; }    
}

[ProtoContract]
public class ModuleOneFooChild : IFooChild
{
    public IFoo Foo { get; set; }

    [ProtoMember(1)]
    public string Detail { get; set; }    
}

[ProtoContract]
public class ModuleTwoFoo : IFoo
{
    [ProtoMember(1)]
    public int FooNumber { get; set; }

    [ProtoMember(2)]
    public IList<IFooChild> Children { get; set; }    
}

[ProtoContract]
public class ModuleTwoFooChild : IFooChild
{
    public IFoo Foo { get; set; }

    [ProtoMember(1)]
    public string Detail { get; set; }    
}
4

1 に答える 1

1

シリアライザーが生成された後にモデルに変更を加えたいと思います。これには、サブタイプの追加が含まれます。これは現在サポートされていません現時点では、型モデルを再作成する必要があります。作業を開始する前に、何を使用したいかを知っていることが期待されます。

ただし、次の 2 つの機能要求のいずれかに価値があることがわかります。

  1. MetaType を解凍するには (生成されたシリアライザー/ストラテジーを吹き飛ばします)
  2. MetaType または RuntimeTypeModel を複製しますが、凍結されていません。
于 2012-07-21T17:05:06.770 に答える