Tag: deserialization protobuf net

如何在Protobuf-Net中保留一个可以为空的值的数组?

我正在从BinaryFormatter迁移到Protobuf-net(到目前为止,它似乎在存储大小和反序列化时间方面提供了巨大的改进)。 然而,我遇到的一个问题是double?[]数组不会以序列化的相同forms反序列化。 数组中任何null的值都会被全部删除 – 即如果我从一个包含6个元素[null,null,1,2,3,null]的数组开始,在反序列化后我最终得到一个数组[1 ,2,3]。 对于我的程序,我必须以与序列化之前完全相同的forms检索这些数组 – 如果使用BinaryFormatter则会发生这种情况。 到目前为止我提出的一个解决方案是为每一个创建两个数组,一个是double [],其中每个元素都有一个值,另一个是bool [],它可以用来描述原始值是否为null – 但是由于各种原因,这是非常低效的。 我可以在之前的相关问题中看到,ProtoMember可能有一个’SupportNull’选项,但是我找不到任何文档清楚地显示如何实现它,并且无法通过游戏来解决这个问题。 任何人都可以提供的帮助将非常感激。

ProtoBuf-Net和Compact Framework中的“源数据中的无效字段:0”错误

当使用ProtoBuf-Net在紧凑框架和完整的.Net框架之间进行序列化/反序列化时,是否有人知道任何问题? 我有一个名为LogData的类,我在紧凑框架3.5下进行序列化,传输到服务器(运行.Net framework 4.0),然后反序列化。 有时候它会起作用,有时会引发上述错误,我还没有将其缩小到任何特定原因。 我已经用不同的值做了很多测试,并且在发生错误时似乎找不到任何押韵或理由。 我在下面包括我的课程(减去各种构造函数)。 我已多次查看任一侧的字节缓冲区,但尚未发现通过线路从一侧传输到另一侧的数据存在差异。 [ProtoContract] public class LogData { [ProtoContract] public enum LogSeverity { [ProtoEnum(Name = “Information”, Value = 0)] Information, [ProtoEnum(Name = “Warning”, Value = 1)] Warning, [ProtoEnum(Name = “Error”, Value = 2)] Error, [ProtoEnum(Name = “Critical”, Value = 3)] Critical } [ProtoMember(1)] public string UserID { get; set; } […]