我有序列化的基类。
[ProtoContract]
public class Web2PdfEntity
{
[ProtoMember(1)]
public string Title { get; set; }
[ProtoMember(2)]
public string CUrl { get; set; }
}
我想将Web2PdfEntity类反序列化为继承自Web2PdfEntity的Web2PdfServer。
public class Web2PdfServer : Web2PdfEntity
{
public void MyServerMethod {}
public void MyServerMethod2{}
}
我尝试使用下面的代码反序列化类,遗憾的是未设置属性。
var web2Pdf = Serializer.Deserialize<Web2PdfServer>("c:\Web2PdfEntity-class-to-serialize-file.bin");
web2Pdf.Title //<- not deserialized
web2Pdf.CURL //<- not deserialized
答案 0 :(得分:2)
(经过大量修订)
根据评论,提出的方案是:
Web2PdfEntity
并加载为Web2PdfServer
或v.v.)这与普通用例略有不同,其中继承类型期望序列化期间继承(更改数据),并且只要契约适合,不相关类型就可以互换。
有几种方法可以解决这个问题;一个小问题是默认它不会查看继承的属性,以避免重复。你可以重新宣传它们,但这有点笨拙。就个人而言,我认为我很想告诉它在app启动时该做什么:
var metaType = RuntimeTypeModel.Default.Add(typeof(Web2PdfServer), false);
metaType.Add(1, "Title").Add(2, "CUrl");
现在,您现有的Serializer
代码会正确处理Web2PdfServer
,包括所指示的两个属性。