COMPASSi/trunk/code/inc/DataManager/DataManagerInterface/include/Serialization.h

81 lines
2.0 KiB
C
Raw Permalink Normal View History

2025-06-25 15:06:42 +08:00
#ifndef SERIALIZATION_H
#define SERIALIZATION_H
#include <QString>
#include <QDebug>
#include <QDateTime>
#include <QMap>
#include <iostream>
#include "DataManagerGlobal.h"
#include "Util.h"
#include "Error.h"
#include "pugixml.hpp"
#include "nlohmann/json.hpp"
// XML JSON序列化与反序列化类抽象基类
class Serialization
{
public:
//virtual int fromXml(const pugi::xml_node node) = 0;
//virtual int toXml(pugi::xml_node node) = 0;
virtual int fromXml()
{
return 0;
}
virtual int toXml()
{
return 0;
}
template <typename T>
static void deserializeDics(T &dic, pugi::xml_node xDic)
{
dic.clear();
if (xDic.empty())
return;
for (auto e : xDic.children("Item"))
{
std::string key = e.attribute("Key").value();
std::string keyType = e.attribute("KeyType").value();
std::string value = e.attribute("Value").value();
std::string valueType = e.attribute("ValueType").value();
if (keyType == "System.String" && valueType == "System.Int32")
{
std::string str = key;
int i = std::stoi(value);
dic.push_back({str, i});
}
}
}
template <typename T>
static void serializeDics(const T &dic, pugi::xml_node xDic)
{
for (const auto &pair : dic)
{
// 获取键值对
const std::string &key = pair.first;
int value = pair.second;
// 创建 Item 节点
pugi::xml_node itemNode = xDic.append_child("Item");
// 设置属性Key、KeyType、Value、ValueType
itemNode.append_attribute("Key") = key.c_str();
itemNode.append_attribute("KeyType") = "System.String";
itemNode.append_attribute("Value") = std::to_string(value).c_str();
itemNode.append_attribute("ValueType") = "System.Int32";
}
}
private:
};
#endif