使用protobuf-net序列化数组时如何处理空值?

时间:2011-09-07 09:45:52

标签: .net protobuf-net

以下声明因NullReferenceException而失败:

TypeModel.Create().DeepClone(new string[1]);

检查源代码会发现异常是故意抛出的,这意味着数组中的null值违反了协议缓冲区规范(有意义,null不是任何值的重复)。

好的,规范是正确的,但如果集合中仍有空值,我们该怎么办?是否有解决方案,除了确保没有null值进入我们的集合?

感谢。

2 个答案:

答案 0 :(得分:6)

见:

http://code.google.com/p/protobuf-net/issues/detail?id=217

引用相关部分

  

项目成员marc.gravell评论4,2011年12月14日

     

我还没有记录那个选项(它是作为特定请求添加的),但是 - 目前你只能启用它(例如):

     

RuntimeTypeModel.Default[typeof (YourType)][3].SupportNull = true;

     

其中3是字段编号。

     

这也应该在属性模型上可用...

注意用户“将” - 我之前回答的删除 - 我知道这不是最好的地方,但我不知道有其他方式给你留言并且在这种情况下只是安静是错的:我是对于第一次“太短”的答案感到抱歉,但是编辑不会比突然删除更有建设性的方法吗?我提供的链接仍然是DID回答问题,评论也证明了......我只是偶然发现你确实删除了它。

答案 1 :(得分:3)

这是一个棘手的问题;在线级,集合只是一个重复的标签 - 每个元素代表一个对象。很简单,无法直接在protobuf规范中表达null

现在,我可能变得脏了,并且对于带有nulls的集合有一些双重标记,但是 - 说实话我认为使用看起来很空的非null对象通常会更好(如果你看到的话)我的意思是说)。在字符串的情况下,也许 ""会做(这取决于上下文,真的)。

我也愿意接受建议,但是......它需要牢记规范的局限性。