cereal json 序列化

https://blog.csdn.net/sunnyloves/article/details/51373793?utm_source=blogxgwz8

http://uscilab.github.io/cereal/

https://github.com/USCiLab/cereal

#include <iostream>
#include <fstream>
#include <string>
#include "cereal/archives/binary.hpp"
#include "cereal/archives/xml.hpp"
#include "cereal/archives/json.hpp"
#include "cereal/types/unordered_map.hpp"
#include "cereal/types/memory.hpp"
#include "cereal/types/string.hpp" //一定要包含此文件,否则无法将std::string序列化为二进制形式,
#include <Winsock2.h> #include <cereal/types/vector.hpp>
using namespace std; struct MyRecord
{
int x, y;
float z; template <class Archive>
void serialize(Archive & ar)
{
ar(x, y, z);
} friend std::ostream& operator<<(std::ostream& os, const MyRecord& mr);
}; std::ostream& operator<<(std::ostream& os, const MyRecord& mr)
{
os << "MyRecord(" << mr.x << ", " << mr.y << "," << mr.z << ")\n";
return os;
} struct SomeData
{
int32_t id;
std::shared_ptr<std::unordered_map<uint32_t, MyRecord>> data; SomeData(int32_t id_ = ) : id(id_), data(new std::unordered_map<uint32_t, MyRecord>)
{ } template <class Archive>
void save(Archive & ar) const
{
ar(id, data);
} template <class Archive>
void load(Archive & ar)
{
ar(id, data);
} void push(uint32_t, const MyRecord& mr)
{
data->insert(std::make_pair(, mr));
} void print()
{
std::cout << "ID : " << id << "\n";
if (data->empty())
return;
for (auto& item : *data)
{
std::cout << item.first << "\t" << item.second << "\n";
}
}
}; void Serialization_XML()
{
{
std::ofstream os("my.xml"); cereal::XMLOutputArchive archive(os); int age = ;
std::string name = "lizheng"; //#define CEREAL_NVP(T) ::cereal::make_nvp(#T, T)
archive(CEREAL_NVP(age), cereal::make_nvp("Name", name)); //os.close(); //注意:这里不能显示关闭ofstream,否则序列化无法写入到文件
} {
std::ifstream is("my.xml");
cereal::XMLInputArchive archive(is); int age;
std::string name; archive(age, name);
std::cout << "Age: " << age << "\n" << "Name: " << name << "\n";
}
} struct testxxx
{
public :
int age; string name; template<class Archive>
void serialize(Archive & ar)
{
ar(CEREAL_NVP(age));
ar(CEREAL_NVP(name));
} }; class MyClass
{
public: //function declarations
MyClass( )
{ }
MyClass(string x,int y,bool z)
{
this->x = x;
this->y = y;
this->z = z;
//this->obj1 = obj1; }
template<class Archive> // public serialization (normal)
void serialize(Archive & ar)
{
ar(CEREAL_NVP(x));
ar(CEREAL_NVP(y));
ar(CEREAL_NVP(z));
ar(CEREAL_NVP(listobj1));
//ar(x, y, z,obj1);
} // member variables
string x;
int y;
bool z; std::vector<testxxx> listobj1;
}; string Utf8ToGb32(const char * lpszUft8Text)
{
int nUnicodeBufLen = MultiByteToWideChar(CP_UTF8, , lpszUft8Text, -, , );
if (nUnicodeBufLen == )
return (""); WCHAR* pUnicodeBuf = new WCHAR[nUnicodeBufLen];
if (pUnicodeBuf == )
return (""); MultiByteToWideChar(CP_UTF8, , lpszUft8Text, -, pUnicodeBuf, nUnicodeBufLen); int nGb32BufLen = WideCharToMultiByte(CP_ACP, , pUnicodeBuf, -, , , NULL, NULL);
if (nGb32BufLen == )
{
delete[] pUnicodeBuf;
return ("");
} char* pGb32Buf = new char[nGb32BufLen];
if (pGb32Buf == )
{
delete[] pUnicodeBuf;
return ("");
} WideCharToMultiByte(CP_ACP, , pUnicodeBuf, -, pGb32Buf, nGb32BufLen, NULL, NULL); string strGb32 = pGb32Buf; delete[] pUnicodeBuf;
delete[] pGb32Buf; return strGb32;
} void Serialization_JSON()
{
////string json_str = "";
//MyClass data("hello", 6, true);
////std::stringstream os;
//{
// std::ofstream os("my.json");
// cereal::JSONOutputArchive archive_out(os);
// archive_out(cereal::make_nvp("MyClass", data));
//}
//string json_str = os.str();
//cout << json_str << endl; //// deserialize
////std::stringstream is(json_str);
//MyClass data_new;
//{
// std::ifstream is("my.json");
// cereal::JSONInputArchive archive_in(is);
// //archive_in(data_new);
// archive_in(cereal::make_nvp("MyClass", data_new));
// //cout << data_new.y << endl;
//} // //写入json
{
std::ofstream os("my.json");
cereal::JSONOutputArchive archive_out(os); MyClass data("hello", , true);
testxxx obj1;
obj1.age = ;
obj1.name = "xiao mmksdfsd"; data.listobj1.push_back(obj1);
obj1.age = ;
obj1.name = "11123xiao mmksdfsd";
data.listobj1.push_back(obj1);
archive_out(cereal::make_nvp("MyClass", data));//MyClass 是json中要读取出的名字
} //从json中读出
{
std::ifstream is("my.json");
cereal::JSONInputArchive archive_in(is); MyClass data_new;
archive_in(cereal::make_nvp("MyClass", data_new)); string xxxx = Utf8ToGb32(data_new.x.c_str());//MyClass 是json中要读取出的名字 int cc = ;
}
} void Serialization_Binary()
{
{
std::ofstream os("my.binary", std::ios::binary);
cereal::BinaryOutputArchive archive(os); int age = ;
std::string name = "lizheng"; archive(CEREAL_NVP(age), CEREAL_NVP(name));
}
{
std::ifstream is("my.binary", std::ios::binary);
cereal::BinaryInputArchive archive(is); int age;
std::string name; archive(age, name);
std::cout << "Age: " << age << "\n" << "Name: " << name << "\n";
}
} void Serialization_Obj()
{
{
std::ofstream os("obj.cereal", std::ios::binary);
cereal::BinaryOutputArchive archive(os); MyRecord mr = { , , 3.0 }; SomeData myData();
myData.push(, mr); archive(myData);
}
{
std::ifstream is("obj.cereal", std::ios::binary);
cereal::BinaryInputArchive archive(is); SomeData myData;
archive(myData);
myData.print();
}
} int main()
{
//Serialization_XML(); std::cout << "----------------------\n"; Serialization_JSON(); std::cout << "----------------------\n"; //Serialization_Binary(); std::cout << "----------------------\n"; Serialization_Obj(); std::cout << "----------------------\n"; getchar();
return ;
}
json文件:
{
"MyClass": {
"x": "hello",
"y": ,
"z": true,
"listobj1": [
{
"age": ,
"name": "xiao mmksdfsd"
},
{
"age": ,
"name": "11123xiao mmksdfsd"
}
]
}
}


USCiLab cereal json 序列化的更多相关文章

  1. .Net深入实战系列—JSON序列化那点事儿

    序 当前主流的序列化JSON字符串主要有两种方式:JavaScriptSerializer及Json.net(Nuget标识:Newtonsoft.Json).JavaScriptSerializer ...

  2. Newtonsoft.Json 序列化和反序列化 时间格式【转】

    1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg:   A a=new A(); a.Name="Elain ...

  3. [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类

    [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类 本节导读: 关于JSON序列化,不能 ...

  4. DotNet的JSON序列化与反序列化

    JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...

  5. C#中JSON序列化和反序列化

    有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...

  6. 使用JSON.Net(Newtonsoft.Json)作为ASP.Net MVC的json序列化和反序列化工具

    ASP.Net MVC默认的JSON序列化使用的是微软自己的JavaScriptSerializer.性能低不说,最让人受不了的是Dictionary<,>和Hashtable类型居然对应 ...

  7. Windows Phone 六、JSON序列化

    JSON序列化 public class Person { public int Id { get; set; } public string Name { get; set; } public in ...

  8. [MVC_Json序列化]MVC之Json序列化循环引用

    在做MVC项目时,难免会遇到Json序列化循环引用的问题,大致错误如下 错误1:序列化类型为“...”的对象时检测到循环引用. 错误2:Self referencing loop detected f ...

  9. NetworkComms V3 使用Json序列化器进行网络通信

    刚才在网上闲逛,偶然看到一篇文章 C#(服务器)与Java(客户端)通过Socket传递对象 网址是:http://www.cnblogs.com/iyangyuan/archive/2012/12/ ...

随机推荐

  1. MySQL学习12 - pymysql模块的使用

    一.pymysql的下载和使用 1.pymysql模块的下载 2.pymysql的使用 二.execute()之sql注入 三.增.删.改:conn.commit() 四.查:fetchone.fet ...

  2. IO流的操作规律。

    1.  明确源和目的 源代表输入流: InputStream, Reader 目的代表输出流: OutputStream, Writer 2. 操作数据是否纯文本 纯文本:字符流 非纯文本: 字节流 ...

  3. L2-010 排座位 (25 分) (最短路)

    链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805066135879680 题目: 布置宴席最微妙的事情,就是给前 ...

  4. java学习笔记04-基本数据类型

    编写一款可用的软件,离不开对数据的操作(经常有人说:程序=数据+算法).数据可能有很多类型,比如对于年龄来说,数据就是整数. 对于金额来,数据是带小数的.在java中,可以分为内置数据类型和引用数据类 ...

  5. Asp.net Mvc 与WebForm 混合开发

      根据项目实际需求,有时候会想在项目中实现Asp.net Mvc与Webform 混合开发,比如前台框架用MVC,后台框架用WebForm.其实要是实现也很简单,如下: (1)在MVC 中使用Web ...

  6. nginx Access-Control-Allow-Origin 多域名跨域设置

    2019-1-16 12:24:15 星期三 网站的静态文件(js, css, 图片, 字体等)是在一个单独的域名下的, 为了防止非法访问, 给nginx添加了跨域的控制, 也可以在PHP代码中添加 ...

  7. .Net core----使用容联云短信推送

    一直在忙于写接口,也没有时间去好好的整理的一片文档,写一篇经常的用到的短信推送案例 还是比较喜欢干货  作为有个程序员 有时候复制粘贴习惯了   实在的还是比较实在 比如能用复制解决的为什么不用复制 ...

  8. 快速搭建Docker Registry私有仓库

    前提条件: 服务器已经安装Docker(我的服务器是CentOS 7) 服务器已经安装Docker Compose 满足以上条件时就可以开始搭建了: 1. 生成用户密码文件:(运行下面命令后会在当前目 ...

  9. Python 爬虫-进阶开发之路

    第一篇:爬虫基本原理: HTTP, 爬虫基础 第二篇:环境安装与搭建: 第三篇:网页抓取:urllib,requests,aiohttp , selenium,  appium 第四篇:网页解析:re ...

  10. app个推(透传消息)