我遇到了奇怪的问题。经过阅读后,我尝试在我的应用程序中部署protobuf-net。类与简单继承绑定。在推测成功序列化之后,我试图反序列化列表,但是protobuf只填充基类!
这里有一些代码:
序列化功能
private static void serialize<T>(T obj) where T: Log
{
using (var fileStream =
new FileStream(fileName, FileMode.Append))
{
Serializer.SerializeWithLengthPrefix(fileStream, obj,
PrefixStyle.Base128, SerializeTypesDictionary.First(x =>
x.Value == obj.GetType()).Key);
}
}
反序列化
private static ArrayList deserialize(string filename)
{
object obj;
var arr = new ArrayList();
using (var fileStream = new FileStream(file, FileMode.Open))
{
while (Serializer.NonGeneric.TryDeserializeWithLengthPrefix
(fileStream, PrefixStyle.Base128, resolver, out obj))
{
arr.Add(obj);
}
}
return arr;
}
和班级
[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)
[ProtoInclude(100, typeof(Error))]
[ProtoInclude(101, typeof(Record))]
[ProtoInclude(102, typeof(SqlQuery))]
public class Log
{...}
[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)]
public class Error:Log
{...}
和其他具有相同结构的
那么,我做错了什么?
P.S。反序列化后,列表包含正确的类(不是基类!所有类在其类型中反序列化),但是使用空字段和基类中的完整字段。
答案 0 :(得分:0)
问题已经结束。
很抱歉浪费你的时间,如果你浪费了它=)只需忘记其中一个派生类的属性,以及它对别人的影响。