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可以识别关联的实体,其他的待验证。

转: http://artwl.cnblogs.com

(转)JavaScriptSerializer,DataContractJsonSerializer解析JSON字符串功能小记的更多相关文章

  1. C#解析JSON字符串总结

    JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串. 操作JSON通常有以下几种方式: 1. 原始方式:按照JSON字符串自己来解析. 2. 通用方式[★★★★★]: ...

  2. C#解析JSON字符串总结(转载)

    JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串. 操作JSON通常有以下几种方式: 1. 原始方式:按照JSON字符串自己来解析. 2. 通用方式[★★★★★]: ...

  3. java解析Json字符串之懒人大法

    面对Java解析Json字符串的需求,有很多开源工具供我们选择,如google的Gson.阿里巴巴的fastJson.在网上能找到大量的文章讲解这些工具的使用方法.我也是参考这些文章封装了自己的Jso ...

  4. 在线聊天项目1.4版 使用Gson方法解析Json字符串以便重构request和response的各种请求和响应 解决聊天不畅问题 Gson包下载地址

    在线聊天项目结构图: 多用户登陆效果图: 多用户聊天效果图: 数据库效果图: 重新构建了Server类,使用了Gson方法,通过解析Json字符串,增加Info类,简化判断过程. Server类代码如 ...

  5. c# 自定义解析JSON字符串数据

    解析json字符串有很多方式, 1 : 在网上下载json解析的dll类库并添加引用, 调用相关方法; 2 : 使用自带类库JavaScriptSerializer的序列号和反序列化; 对于以上两个方 ...

  6. mysql解析json字符串相关问题

    很多时候,我们需要在sql里面直接解析json字符串.这里针对mysql5.7版本的分水岭进行区分. 1.对于mysql5.7以上版本 使用mysql的内置函数JSON_EXTRACT(column, ...

  7. 使用 dynamic 标记解析JSON字符串 JDynamic :支持Json反序列化为Dynamic对象

    使用 dynamic 标记解析JSON字符串  http://www.cnblogs.com/taotaodetuer/p/4171327.html 1 string jsonStr = " ...

  8. json解析json字符串时候,数组必须对应jsonObjectArray,不能对应JsonObject。否则会解析错误。

    json第三方解析json字符串时候,json数组必须对应jsonObjectArray,不能对应JsonObject.->只要是[]开头的都是json数组字符串,就要用jsonArray解析 ...

  9. Json转model对象,model转json,解析json字符串

    GitHub链接: https://github.com/mozhenhau/D3Json D3Json 通过swift的反射特性,把json数据转换为model对象,本类最主要是解决了其他一般jso ...

随机推荐

  1. Redis(六)-- SpringMVC整合Redis

    一.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...

  2. js里面函数的内部属性

    1.arguments用來存放传输参数的集合,可以被调用多次,每次数組都不一样,增强了函数的强壮性 实例: function calc() { var sum = 0; /*参数为一个时候*/ if ...

  3. (一)微信小程序之模拟调用后台接口踩过的坑

    如下图标记的三个点 在调试过程中出现问题,特此记录. 1. 之前在浏览器测试接口习惯省略 http:// ,是因为浏览器默认有一个检测,在你输入的网址前面加http://,如果有就不加. 然而在微信小 ...

  4. EL表达式格式化日期时间

    1.首先引入标签库 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> ...

  5. 《C#高级编程》学习笔记------什么是COM组件

    COM是Component Object Model (组件对象模型)的缩写. 用户需要什么样的软件产品?这是一个多选题,但高效,健壮是肯定会被选中的.作为一名软件开发人员如何做才能满足用户的需要呢? ...

  6. 解决instance中文命名导致nova list报错问题

    当创建instance之后,如果使用英文命名,执行nova list的时候,无问题,但是,如果instance中出现中文,执行nova list的时候,会报以下错误: [root@controller ...

  7. 【jQuery系列之插件】jquery插件之jquery-validation

    equalTo方法: equalTo: function( value, element, param ) { // Bind to the blur event of the target in o ...

  8. CSS-自定义高度的元素背景图如何自适应以及after伪元素在ie下的处理

    我都好久没更新了! 遇到一个效果,之前没有考虑清楚,设置了固定高度,到了后边,产品要加长,我就觉得设计得从新弄张长点的背景图!这不多余么? 其实分析原图还是可以再切分,再细化到不用改设计图,让我们前端 ...

  9. Excel 2010 如何快速统计一列中相同数值出现的个数 很不错

    https://jingyan.baidu.com/article/9113f81b2c16822b3214c785.html 最近经常看到论坛和百度知道的朋友提问关于“excel中如何快速统计一列中 ...

  10. Eclipse failed to get the required ADT version number from the sdk

    failed to get the required ADT version number from the sdk 解决方法: eclipse 和 android studio 工具不能同时共用同一 ...