会员数在Microsoft Bond中意味着什么?

时间:2016-09-29 09:55:45

标签: bond

使用Microsoft Bond (the C# library in particular),我看到只要定义了Bond结构,它就像这样:

struct Name
{
   0: type name;
   5: type name;
   ...
}

这些数字(0,5,......)是什么意思?

他们需要继承特殊待遇吗? (我是否需要确保不覆盖我祖先中定义的相同编号的成员?)

1 个答案:

答案 0 :(得分:4)

田间序数是每个田地的唯一身份。序列化为标记的二进制协议时,这些数字用于指示有效负载中的哪些字段。不使用字段的名称。 (重命名.bond文件中的字段不会打破序列化的二进制数据兼容性[虽然,请参阅下面关于文本协议的警告]。)数字小于字符串,这有助于减少有效负载大小,但也最终改进序列化/反序列化时间。

您不能在同一个结构中重复使用相同的字段序号。

从结构继承时(或者如果结构中有结构字段),不需要特殊处理。邦德将结构的序数分开。具体而言,以下是合法的,并将起作用:

namespace inherit_use_same_ordinal;

struct Base {
    0: string field;
}

struct Derived : Base {
    0: bool field;
}

关于文本序列化协议(如Simple JSON和Simple XML)的警告:这些协议使用字段名称作为字段标识符。因此,在这些协议中,重命名字段会破坏序列化数据兼容性。

此外,Simple JSON和Simple XML展平了继承层次结构,因此在Base和Derived中重复使用名称将导致冲突。两者都有办法解决这个问题。对于Simple XML,SimpleXml.Settings.UseNamespaces parameter can be set to true发出完全限定名称。

对于Simple JSON,Bond attribute JsonName可用于更改用于Simple JSON序列化的名称,以避免冲突:

struct Derived : Base {
    [JsonName("derived_field")]
    0: bool field;
}