【发布时间】:2018-08-13 09:41:58
【问题描述】:
我正在尝试序列化和反序列化 List<T>。
最终目标是为 API 序列化对象/对象列表。
Protobuf-net 2.3.17(撰写本文时的最后一个)
经过一些阅读,我还没有解决这个问题。 这是我用于测试的简单代码,但也用于我的序列化/反序列化类:
using (var stream = new MemoryStream())
{
Serializer.Serialize(stream, data);
var x = stream.ToArray();
using (var stream2 = new MemoryStream(x))
{
var r = Serializer.Deserialize<List<Host>>(stream);
}
}
数据是List<Host>(150~ 个元素)
host 是一个简单的类:
[Serializable]
[ProtoContract(ImplicitFields = ImplicitFields.AllPublic, SkipConstructor = true)]
public class Host
{
public Guid GidHost { get; set; }
public int IdA { get; set; }
public string HostName { get; set; }
public string Description { get; set; }
[DefaultValue(StatusEnum.Undefined)]
public HostStatusEnum Status { get; set; }
public string Address { get; set; }
ecc.. (some other public primitive variables)
[Serializable]
public enum StatusEnum
{
Undefined = 0,
Ok = 1,
Offline = 2
}
}
虽然 x(我猜)被正确序列化(x 包含 33000 字节) r 是一个包含 0 个元素的集合。
怎么了,我错过了什么?
谢谢
【问题讨论】:
-
您在反序列化时使用的是流,而不是流2。所以内存流的位置大概是在最后……寻找到开头。
标签: c# protobuf-net