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

81 lines
2.0 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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