是否可以从定义的模型中访问现有的序列化模型,然后为其附加一个合同但未知的子类型,然后将其用于序列化?
还是我需要明确创建一个新模型?即在这种情况下为ModuleTwoFoo
var model = TypeModel.Create();
model[typeof(IFooChild)].AddSubType(2, typeof(ModuleTwoFooChild));
model.CompileInPlace();
RuntimeModel.Default [] // model []是访问... Doh !
我唯一的抱怨,如果有的话...希望有一种方法可以访问原始模型,然后在其上构建而不是再次重新生成模型
正如marc所说,“基本上所需要的是克隆但未解冻的模型”
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; }
}
答案 0 :(得分:1)
我假设您希望在生成序列化程序后对模型进行更改,这将包括添加子类型。目前尚不支持 - 当前时间您需要重新创建类型模型。您希望在开始使用之前知道您想要使用的内容!
但是,我可以看到两个功能请求之一的价值: