定義されたモデルから既存のシリアライゼーション モデルにアクセスし、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; }
}