【问题标题】:How to deal with null values when serializing arrays with protobuf-net?使用 protobuf-net 序列化数组时如何处理空值?
【发布时间】:2011-09-07 09:45:52
【问题描述】:

以下语句以NullReferenceException 失败:

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

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

好的,规范是正确的,但是如果集合中仍然存在空值,我们该怎么办?除了确保没有 null 值进入我们的集合之外,还有其他解决方案吗?

谢谢。

【问题讨论】:

    标签: .net protobuf-net


    【解决方案1】:

    看这个:

    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 是字段编号。

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

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

    【讨论】:

    • 我们可以在 Java 中启用它吗?这也可以在 Java 中的“精简”或“完整”版本的库中使用吗?
    • @metsathya 不幸的是,我没有 Java 方面的 Protobuf 经验,因此无法评论 Java 选项。
    【解决方案2】:

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

    现在,我可能会弄脏并为带有 null 的集合添加某种双重标签,但是 - 老实说,我认为通常使用看起来为 null 的非 null 对象会更好(如果你看到我的意思是说)。在字符串的情况下,也许 "" 会做(这取决于上下文,真的)。

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

    【讨论】:

    • 似乎问题出在任何引用类型上,而不仅仅是字符串。还是只有字符串,因为它是唯一的核心引用类型?
    • @chibacity 不考虑(固定)数据格式
    • @mark 任何引用类型(list-of/array-of),并且可能为 nullable-of-t(list-of/array-of)
    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 2011-01-23
    相关资源
    最近更新 更多