gpt4 book ai didi

serialization - 使用 Protobuf-Net,意外子类型在运行时创建 TypeModel

转载 作者:行者123 更新时间:2023-12-04 06:11:38 24 4
gpt4 key购买 nike

我有下面的类结构,并想在运行时使用 Protobuf-Net 序列化它.不幸的是,我收到错误“意外的子类型:Web2Pdf”。为什么?

var web2PdfEntity = new Web2Pdf();
web2PdfEntity.Property1 = 1;
web2PdfEntity.Property2 = 2;
web2PdfEntity.Property3 = 3;

var model = TypeModel.Create();
model.Add(typeof (EntityBase), true).AddSubType(20000, typeof (WebEntity)).AddSubType(30000,typeof (Web2Pdf));
model.CompileInPlace();



using (var stream = new FileStream(@"C:\1.txt", FileMode.Create, FileAccess.Write, FileShare.None))
{
model.Serialize(stream, web2PdfEntity); //Get exception here!
}


[ProtoContract]
public abstract class EntityBase
{
[ProtoMember(1011)]
public int Property1 { get; set; }
}

[ProtoContract]
public abstract class WebEntity : EntityBase
{
[ProtoMember(1012)]
public int Property2 { get; set; }
}

[ProtoContract]
public sealed class Web2Pdf : WebEntity
{
[ProtoMember(1013)]
public int Property3 { get; set; }
}

最佳答案

子类型必须与直接父类型相关联,因此:EntityBase需要了解WebEntity , 和 WebEntity需要了解Web2Pdf (而不是 EntityBase 知道两者和 WebEntity 不知道 Web2Pdf )。

对于信息,较小的标签编号也更有效 - 但取决于您。

此外,这一切都可以通过 [ProtoInclude(...)] 来完成。 ,如果子类型编号固定,则可以更方便。

关于serialization - 使用 Protobuf-Net,意外子类型在运行时创建 TypeModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7713303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com