以下声明因NullReferenceException
而失败:
TypeModel.Create().DeepClone(new string[1]);
检查源代码会发现异常是故意抛出的,这意味着数组中的null
值违反了协议缓冲区规范(有意义,null
不是任何值的重复)。
好的,规范是正确的,但如果集合中仍有空值,我们该怎么办?是否有解决方案,除了确保没有null
值进入我们的集合?
感谢。
答案 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对象通常会更好(如果你看到的话)我的意思是说)。在字符串的情况下,也许 ""
会做(这取决于上下文,真的)。
我也愿意接受建议,但是......它需要牢记规范的局限性。