iguana::json/xml 序列化框架
环境:win10 vs2017 c++17 boost
1、下载源码:https://github.com/qicosmos/iguana
2、创建工程,包含源码目录、boost库目录;boost库;c++17
//json结构模板
struct person
{
std::string name;
int age;
};
REFLECTION(person, name, age) struct one_t
{
int id;
};
REFLECTION(one_t, id); struct two
{
std::string name;
one_t one;
int age;
};
REFLECTION(two, name, one, age); struct composit_t
{
int a;
std::vector<std::string> b;
int c;
std::map<int, int> d;
std::unordered_map<int, int> e;
double f;
std::list<one_t> g;
};
REFLECTION(composit_t, a, b, c, d, e, f, g);
void test_json()
{
person p;
const char * json = "{ \"name\" : \"tom\", \"age\" : 20}";
//string转对象
auto r = iguana::json::from_json0(p, json);
std::cout << p.age << " " << p.name << std::endl; iguana::string_stream ss;
//对象转string
iguana::json::to_json(ss, p);
std::cout << ss.str() << std::endl; //复杂结构转string
one_t one = { };
composit_t composit = { ,{ "tom", "jack" }, ,{ { , } },{ { , } }, 5.3,{ one } };
iguana::string_stream sst;
iguana::json::to_json(sst, composit);
std::cout << sst.str() << std::endl; //string转对象
const char* str_comp = R"({"b":["tom", "jack"], "a":1, "c":3, "e":{"":4}, "d":{"":3,"":6},"f":5.3,"g":[{"id":1},{"id":2}])";
composit_t comp;
iguana::json::from_json0(comp, str_comp);
std::cout << comp.a << " " << comp.f << std::endl;
}
void test_xml()
{
person p = { "admin", };
iguana::string_stream ss;
iguana::xml::to_xml(ss, p);
std::cout << ss.str() << std::endl;
//<?xml version = "1.0" encoding="UTF-8"><name>admin</name><age>20</age> ss.clear();
two t = { "test", {}, };
iguana::xml::to_xml(ss, t);
auto result = ss.str();
std::cout << result << std::endl;
//<?xml version = "1.0" encoding="UTF-8"><name>test</name><one><id>2</id></one><age>4</age> std::string xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"> <name>buke</name> <one><id>1</id></one> <age>2</age>";
two t1;
iguana::xml::from_xml(t1, xml.data(), xml.length());
std::cout << t1.name << std::endl;
}
iguana::json/xml 序列化框架的更多相关文章
- Atitit.json xml 序列化循环引用解决方案json
Atitit.json xml 序列化循环引用解决方案json 1. 循环引用1 2. 序列化循环引用解决方法1 2.1. 自定义序列化器1 2.2. 排除策略1 2.3. 设置序列化层次,一般3级别 ...
- JSON/XML序列化与反序列化(非构造自定义类)
隔了很长时间再重看自己的代码,觉得好陌生..以后要养成多注释的好习惯..直接贴代码..对不起( ▼-▼ ) 保存保存:进行序列化后存入应用设置里 ApplicationDataContainer _a ...
- Json/XML序列化和反序列化
1.json序列化和反序列化 序列化是将对象状态转换为可保持或传输的格式的过程; 反序列化,它将流转换为对象; 1)Json.Net 推荐使用Json.Net类库,需要引入的命名空间; 序列化:Jso ...
- 使用高性能xml序列化框架jibx作为spring mvc的xml view
package org.springframework.web.servlet.view.xml; import java.io.ByteArrayOutputStream; import java. ...
- 【ASP.NET Web API教程】6.2 ASP.NET Web API中的JSON和XML序列化
谨以此文感谢关注此系列文章的园友!前段时间本以为此系列文章已没多少人关注,而不打算继续下去了.因为文章贴出来之后,看的人似乎不多,也很少有人对这些文章发表评论,而且几乎无人给予“推荐”.但前几天有人询 ...
- Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化
前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文描述ASP.NET W ...
- ASP.NET Web API中的JSON和XML序列化
ASP.NET Web API中的JSON和XML序列化 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok ...
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目
ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 我们都知道在使用WebApi的时候Controller会自动将Action的返回值自动进行各种序列化处理(序列化为 ...
- JSON格式序列化与反序列化(List、XML)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
随机推荐
- thinkphp6 常用方法文档
请求变量 use think\facade\Request; Request::param('name'); Request::param();全部请求变量 返回数组 Request::param([ ...
- Linux 笔记 - 前三章 CentOS 简介、安装和远程连接
博客地址:http://www.moonxy.com 一.Unix 和 Linux 的区别 目前主流的 Unix 系统有三种,分别是 IBM-AIX.HP-UX.SUN-Solaris,它们分别运行在 ...
- sys模块理解补充
首先,我们利用import语句输入sys模块.基本上这句话告诉python,我们想要这个模块.sys模块包含了与python解释器和它的环境有关的函数. 当python执行import sys语句的时 ...
- Asp.net Windows 身份验证-域验证
一.在web.config中设置: <authentication mode="Windows" /> 二.获取计算机名\账户名 使用代码:HttpContext.Cu ...
- [技术栈]C#利用Luhn算法(模10算法)对IMEI校验
1.Luhn算法(模10算法) 通过查看ISO/IEC 7812-1:2017文件可以看到对于luhn算法的解释,如下图: 算法主要分为三步: 第一步:从右边第一位(最低位)开始隔位乘2: 第二步:把 ...
- 决策树(基于增益率)之python实现
如图,为使用到的公式,信息熵表明样本的混乱程度,增益表示熵减少了,即样本开始分类,增益率是为了平衡增益准则对可取值较多的属性的偏好,同时增益率带来了对可取值偏小的属性的偏好,实际中,先用增益进行筛选, ...
- 今天第一次解决了程序在未装VS和XP下运行的问题
http://www.cnblogs.com/zero5/p/3162948.html 一位素不相识的朋友做的代码雨屏保程序 - 残雪孤侠 - 博客园 上面是我的BLOG 群共享里,有程序和代码 ...
- Merge into 语句实例
/*Merge into 详细介绍MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句.通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配 ...
- centos 7 常用yum源配置
使用centos系统最熟悉的莫过于yum命令,yum命令可以让安装软件变得那么简单,编译安装的依赖关系大部分都会解决. 工具/原料 centos 7 wget yum 方法/步骤 什么是y ...
- xpath语法分享
# xpath语法: ## 使用方式: 使用//获取整个页面当中的元素,然后写标签名,然后再写谓词进行提取.比如: ``` //div[@class='abc'] ``` ## 需要注意的知识点: 1 ...