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

yuv*_*lm2 7 bond

使用Microsoft Bond(特别是C#库),我看到每当定义一个Bond结构时,它看起来像这样:

struct Name
{
   0: type name;
   5: type name;
   ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

chw*_*arr 4

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

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

当您从结构体继承时(或者如果您的结构体中有一个结构体字段),则不需要特殊处理。Bond 将结构体的序数分开。具体来说,以下是合法且有效的:

namespace inherit_use_same_ordinal;

struct Base {
    0: string field;
}

struct Derived : Base {
    0: bool field;
}
Run Code Online (Sandbox Code Playgroud)

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

此外,Simple JSON 和 Simple XML 使继承层次结构扁平化,因此在 Base 和 Derived 之间重复使用名称将导致冲突。两者都有办法解决这个问题。对于简单 XML,SimpleXml.Settings.UseNamespaces可以将该参数设置true为发出完全限定名称。

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

struct Derived : Base {
    [JsonName("derived_field")]
    0: bool field;
}
Run Code Online (Sandbox Code Playgroud)