(转)JavaScriptSerializer,DataContractJsonSerializer解析JSON字符串功能小记
JsonAbout:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Web.Script.Serialization;
using System.Runtime.Serialization.Json; namespace ConsoleApplicationTest
{
public class JsonAbout
{
public static T Json2ModelJS<T>(string JsonStr)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
T userJson = jss.Deserialize<T>(JsonStr);
return userJson;
} public static string Model2JsonJS<T>(T model)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
string userJson = jss.Serialize(model);
return userJson;
} public static T Json2Model<T>(string jsonString)
{
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
{
return (T)new DataContractJsonSerializer(typeof(T)).ReadObject(ms);
}
} public static string Model2Json<T>(T jsonObject)
{
using (var ms = new MemoryStream())
{
new DataContractJsonSerializer(typeof(T)).WriteObject(ms, jsonObject);
return Encoding.UTF8.GetString(ms.ToArray());
}
}
}
}
测试类:
public class JsonModelDemo
{
public void Show()
{
string jsonA = "{\"IDA\":1,\"NameA\":\"A\",\"B\":{\"IDB\":2,\"NameB\":\"B\"}}";
string jsonB = "{\"Msg\":\"Test\",\"Data\":{\"IDA\":1,\"NameA\":\"A\",\"B\":[{\"IDB\":2,\"NameB\":\"B1\"},{\"IDB\":3,\"NameB\":\"B2\"}]}}";
Console.WriteLine("DataContractJsonSerializer:");
A a1 = JsonAbout.Json2Model<A>(jsonA);
B b1 = JsonAbout.Json2Model<B>(jsonA);
A a2 = JsonAbout.Json2Model<A>(jsonB);
B b2 = JsonAbout.Json2Model<B>(jsonB);
Output(a1);
Output(b1);
Output(a2);
Output(b2); Console.WriteLine("JavaScriptSerializer:");
A a3 = JsonAbout.Json2ModelJS<A>(jsonA);
B b3 = JsonAbout.Json2ModelJS<B>(jsonA);
A a4 = JsonAbout.Json2ModelJS<A>(jsonB);
B b4 = JsonAbout.Json2ModelJS<B>(jsonB);
Output(a3);
Output(b3);
Output(a4);
Output(b4);
} private void Output(A a)
{
Console.WriteLine("IDA:"+a.IDA + ", NameA:" + a.NameA);
if (a.b != null)
{
Console.WriteLine("B:"+a.b.IDB+","+a.b.NameB);
}
}
private void Output(B b)
{
Console.WriteLine("IDB:" + b.IDB + ", NameB:" + b.NameB);
}
}
public class A
{
public int IDA { get; set; } public string NameA { get; set; } public B b { get; set; }
} public class B
{
public int IDB { get; set; } public string NameB { get; set; }
}
输出:
DataContractJsonSerializer:
IDA:1, NameA:A
IDB:0, NameB:
IDA:0, NameA:
IDB:0, NameB:
JavaScriptSerializer:
IDA:1, NameA:A
B:2,B
IDB:0, NameB:
IDA:0, NameA:
IDB:0, NameB:
结论:JavaScriptSerializer可以识别关联的实体,其他的待验证。
(转)JavaScriptSerializer,DataContractJsonSerializer解析JSON字符串功能小记的更多相关文章
- C#解析JSON字符串总结
JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串. 操作JSON通常有以下几种方式: 1. 原始方式:按照JSON字符串自己来解析. 2. 通用方式[★★★★★]: ...
- C#解析JSON字符串总结(转载)
JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串. 操作JSON通常有以下几种方式: 1. 原始方式:按照JSON字符串自己来解析. 2. 通用方式[★★★★★]: ...
- java解析Json字符串之懒人大法
面对Java解析Json字符串的需求,有很多开源工具供我们选择,如google的Gson.阿里巴巴的fastJson.在网上能找到大量的文章讲解这些工具的使用方法.我也是参考这些文章封装了自己的Jso ...
- 在线聊天项目1.4版 使用Gson方法解析Json字符串以便重构request和response的各种请求和响应 解决聊天不畅问题 Gson包下载地址
在线聊天项目结构图: 多用户登陆效果图: 多用户聊天效果图: 数据库效果图: 重新构建了Server类,使用了Gson方法,通过解析Json字符串,增加Info类,简化判断过程. Server类代码如 ...
- c# 自定义解析JSON字符串数据
解析json字符串有很多方式, 1 : 在网上下载json解析的dll类库并添加引用, 调用相关方法; 2 : 使用自带类库JavaScriptSerializer的序列号和反序列化; 对于以上两个方 ...
- mysql解析json字符串相关问题
很多时候,我们需要在sql里面直接解析json字符串.这里针对mysql5.7版本的分水岭进行区分. 1.对于mysql5.7以上版本 使用mysql的内置函数JSON_EXTRACT(column, ...
- 使用 dynamic 标记解析JSON字符串 JDynamic :支持Json反序列化为Dynamic对象
使用 dynamic 标记解析JSON字符串 http://www.cnblogs.com/taotaodetuer/p/4171327.html 1 string jsonStr = " ...
- json解析json字符串时候,数组必须对应jsonObjectArray,不能对应JsonObject。否则会解析错误。
json第三方解析json字符串时候,json数组必须对应jsonObjectArray,不能对应JsonObject.->只要是[]开头的都是json数组字符串,就要用jsonArray解析 ...
- Json转model对象,model转json,解析json字符串
GitHub链接: https://github.com/mozhenhau/D3Json D3Json 通过swift的反射特性,把json数据转换为model对象,本类最主要是解决了其他一般jso ...
随机推荐
- hdu 4849 最短路 西安邀请赛 Wow! Such City!
http://acm.hdu.edu.cn/showproblem.php?pid=4849 会有非常多奇怪的Wa的题.当初在西安就不知道为什么wa,昨晚做了,由于一些Sb错误也wa了非常久.这会儿怎 ...
- poj_3321 线段树/树状数组
题目大意 一个果树(每个节点的分叉数目不固定)上有N个分叉点(包括最末的叶节点),则有N-1条边,将分叉点进行从1到N编号,每个分叉点上均可以结水果.开始的时候,每个分叉点都有一个水果,之后进行一系列 ...
- 使用OpenRowSet操作Excel Excel导入数据库
使用 OpenRowSet 和 OpenDataSource 访问 Excel 97-2007 测试文件:D:\97-2003.xls和D:\2007.xlsx,两个文件的内容是一模一样的. 测试环境 ...
- hadoop 2.2.0集群安装详细步骤(简单配置,无HA)
安装环境操作系统:CentOS 6.5 i586(32位)java环境:JDK 1.7.0.51hadoop版本:社区版本2.2.0,hadoop-2.2.0.tar.gz 安装准备设置集群的host ...
- JavaWeb温习之HttpServletResquest对象
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息. 1 ...
- 【BZOJ2668】[cqoi2012]交换棋子 费用流
[BZOJ2668][cqoi2012]交换棋子 Description 有一个n行m列的黑白棋盘,你每次可以交换两个相邻格子(相邻是指有公共边或公共顶点)中的棋子,最终达到目标状态.要求第i行第j列 ...
- 【BZOJ1834】[ZJOI2010]network 网络扩容 最大流+最小费用流
[BZOJ1834][ZJOI2010]network 网络扩容 Description 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用.求: 1. 在不 ...
- mybatis按姓名或手机号搜索
1.AND ((USER_NAME LIKE '%'||#{searchKey}||'%') OR (MOBILE_PHONE LIKE '%'||#{searchKey}||'%'))2. < ...
- 微信小程序 --- loading提示框
loading:提示框: 效果: loading和toast和像,只不过 toast 是设置结束时间,时间到了去触发bindchange事件,进行隐藏. 但是 loading 是没有办法设置事件让其隐 ...
- 【webpack】---模块打包机webpack基础使用---【巷子】
001.什么是webpack? 作用有哪些? WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,Ty ...