如何在JSON中标记对象的继承
How to mark inheritance of an object in JSON?
我将用JSON设计一个简单的数据格式,它将序列化一些略有不同的机器类型的配置数据。数据格式应该支持继承-如果"InheritedObject"中只有一个(或几个)参数更改,我可以主要使用"BaseObject"的参数。我的第一个想法显示在以下代码片段中:
{
"BaseObject":
{
"Description": "some text",
"Type": "4",
"Value": 0.33
},
"InheritedObject":
{
"Parent": "BaseObject",
"Element_3": 11
}
}
我至少有三个用例:
- 从JSON读取(如果我使用"InheritedObject",我希望从Inherited Object中获取所有元素,再加上在InheritedObject中未覆盖的BaseOjbect中的元素)
- 写入JSON(((auto?)比较"BaseObject"answers"InheritedObject"之间的差异并将差异写入"Inherited Object")
- 基类中参数的更改也应该自动更改继承对象中的参数
我认为这应该有效,但在读写JSON时需要一些额外的工作。
JSON中是否有"内置"功能,或者至少有很好的支持?如果是,C++的哪个JSON库支持它(JsonCpp,JSON Spirit)?或者有没有一种从零开始实现此功能的最佳实践方法。或者,在XML或YAML(或其他任何东西)中是否有对该任务的良好支持——我还没有完全固定于JSON?
据我所知,大多数序列化工具/库都不使用这种方法,而是将类和所有实例数据存储到一个JSON对象中。我不知道你为什么首先想要这样,因为一些通常非常简单的操作(有多少个[类型X]的对象?)可能会变得非常复杂和计算缓慢(简单存储:只需要JSON对象的数量即可。你的"存储继承"方法:加载所有内容,解析继承的数据"引用"等)。
我不认为有必要将基础数据和继承的类数据分开,因为在读取数据时可以忽略未知属性(与处理真实的C++对象相反)。所以我不建议让它变得如此复杂,只需将所有对象数据存储在一个JSON对象中即可。如果原因是这样的话,C++中也不能有重复的属性。
如果你考虑的是存储大小,那么这很可能不值得付出努力。除非您存储了数百万个对象,但无论如何,具有JSON详细程度的文本格式都不是首选工具。在这种情况下,选择boost.serialization、QDataStream或类似的二进制格式。
- 如何创建从同一类继承的不同对象的向量
- 如何在QT Creator上将QWidget声明为继承类的对象
- 如果'C'公开继承'B',B 私下继承'A',为什么我不能在"C"中创建"A"的对象?
- 私有字段对象与私有继承?
- 为什么我不能在主函数之外定义一个类的对象(它继承了另一个类)?
- C++:返回一个基于范围 for 循环迭代器,其中包含继承对象
- 使用智能指针附加的继承对象的深层复制
- 如何继承返回对当前对象的引用的方法?
- C++具有空派生类对象的继承大小
- 防止在按值传递对象(继承)时进行切片
- 具有多个继承共享一个资源的对象 - 寻找良好的设计模式
- 对象成员变量还是继承
- 继承 - 查找类的对象的大小
- 成员子对象继承存储持续时间是否有任何非直观的副作用
- 访问从 QObject 继承的对象继承的类的Q_Properties
- c++如何返回当前类类型的对象(继承)
- 在对象继承中构造对象后设置稍后的值
- c++ -从其他对象继承std::元组,并为其添加虚函数
- 我有一个基对象和派生类对象的向量,但我无法访问存储在向量中的派生对象继承的数据成员
- 从基础对象继承接口是一种好的做法吗