为什么 Bond 映射的 JSON 序列化是数组而不是字典?
Why is the JSON serialization of a Bond map an array instead of a dictionary?
假设我有一个像
这样的债券结构
struct Person
{
0: string name;
1: map<string, string> phone_numbers;
}
当我使用 SimpleJsonWriter
将该对象的实例序列化为 JSON 时,我得到以下内容
{"name":"Jenny","phone_numbers":["home","867-5309","office","555-1212"]}
注意 phone_numbers
是一个字符串数组。
但我更期待这样的事情:
{"name":"Jenny","phone_numbers":{"home":"867-5309","office":"555-1212"}}
其中 phone_numbers
是一个有两个成员的对象。
怎么回事?
Bond 的简单 JSON 协议使用有效 JSON,但它并不总是最惯用的 JSON。解析 Bond 的简单 JSON 协议的最佳方法是使用 Bond 本身。
在这种特殊情况下,我们需要记住 Bond 允许使用其他原始类型(例如整数、双精度、布尔值)的键进行映射。因此,Bond 对所有地图都使用键值对数组。
比如一个map<int32, string>
被序列化为
"numbers":[1,"unu",2,"du",3,"tri"]
gbc
为 C# 生成的 C# 对象非常简单。 Newtonsoft's Json.NET library 通常可以毫无问题地将它们序列化为更惯用的 JSON。 Bond 使用这个库来实现它的一些 JSON 支持,所以如果你需要更多惯用的 JSON 输出,这对你来说也不是一个新的依赖项。
对于 C++,如果您需要惯用的 JSON 输出,您可以编写自定义转换以使用您选择的 JSON 序列化库。
可以想象,map<string, string>
可以特殊情况下序列化为一个对象。此外,可以开发 encode/decode 将所有基元类型转换为成员名称的转换规则。
但是,对现有简单 JSON 协议的这种更改会破坏现有的序列化数据,这不是您希望从序列化库中获得的东西。 :-)
需要在新版本的 Simple JSON 中或作为新的 JSON 序列化协议添加这样的更改,可能与现有的 Simple JSON协议。
假设我有一个像
这样的债券结构struct Person
{
0: string name;
1: map<string, string> phone_numbers;
}
当我使用 SimpleJsonWriter
将该对象的实例序列化为 JSON 时,我得到以下内容
{"name":"Jenny","phone_numbers":["home","867-5309","office","555-1212"]}
注意 phone_numbers
是一个字符串数组。
但我更期待这样的事情:
{"name":"Jenny","phone_numbers":{"home":"867-5309","office":"555-1212"}}
其中 phone_numbers
是一个有两个成员的对象。
怎么回事?
Bond 的简单 JSON 协议使用有效 JSON,但它并不总是最惯用的 JSON。解析 Bond 的简单 JSON 协议的最佳方法是使用 Bond 本身。
在这种特殊情况下,我们需要记住 Bond 允许使用其他原始类型(例如整数、双精度、布尔值)的键进行映射。因此,Bond 对所有地图都使用键值对数组。
比如一个map<int32, string>
被序列化为
"numbers":[1,"unu",2,"du",3,"tri"]
gbc
为 C# 生成的 C# 对象非常简单。 Newtonsoft's Json.NET library 通常可以毫无问题地将它们序列化为更惯用的 JSON。 Bond 使用这个库来实现它的一些 JSON 支持,所以如果你需要更多惯用的 JSON 输出,这对你来说也不是一个新的依赖项。
对于 C++,如果您需要惯用的 JSON 输出,您可以编写自定义转换以使用您选择的 JSON 序列化库。
可以想象,map<string, string>
可以特殊情况下序列化为一个对象。此外,可以开发 encode/decode 将所有基元类型转换为成员名称的转换规则。
但是,对现有简单 JSON 协议的这种更改会破坏现有的序列化数据,这不是您希望从序列化库中获得的东西。 :-)
需要在新版本的 Simple JSON 中或作为新的 JSON 序列化协议添加这样的更改,可能与现有的 Simple JSON协议。