gpt4 book ai didi

bond - Microsoft Bond 中的成员(member)编号是什么意思?

转载 作者:行者123 更新时间:2023-12-04 12:29:01 24 4
gpt4 key购买 nike

使用 Microsoft Bond (the C# library in particular) ,我看到每当定义一个 Bond 结构时,它看起来像这样:

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

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

他们在继承时需要特殊处理吗? (我是否需要确保我不会覆盖在我的祖先中定义的具有相同编号的成员?)

最佳答案

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

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

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

namespace inherit_use_same_ordinal;

struct Base {
0: string field;
}

struct Derived : Base {
0: bool field;
}

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

此外,Simple JSON 和 Simple XML 使继承层次结构扁平化,因此跨 Base 和 Derived 重用名称将导致冲突。两者都有解决此问题的方法。对于简单 XML, SimpleXml.Settings.UseNamespaces parameter can be set to true 发出完全限定的名称。

对于简单 JSON, Bond attribute JsonName 可用于更改用于简单 JSON 序列化的名称,以避免冲突:
struct Derived : Base {
[JsonName("derived_field")]
0: bool field;
}

关于bond - Microsoft Bond 中的成员(member)编号是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39767118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com