现在关于json的读写问题,有许许多多的解决方法,因人而异,根据实际问题去选择自己想要的最容易方法。我觉得自带的Newtonsoft.Json是个不错的选择,随便写两个例子吧!

一:关于简单的json序列化和反序列化,可以用Newtonsoft.Json+实体类去解决。
首先搞个jsonhelp类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Runtime.Serialization.Json;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
namespace SerializationAndDeserialization.Code
{
public class JsonHelp
{
/// <summary>
/// JSON序列化
/// </summary>
public static string JsonSerializer<T>(T t)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream();
ser.WriteObject(ms, t);
string jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
//替换Json的Date字符串
string p = @"\\/Date\((\d+)\+\d+\)\\/";
MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);
Regex reg = new Regex(p);
jsonString = reg.Replace(jsonString, matchEvaluator);
return jsonString;
}

/// <summary>
/// JSON反序列化
/// </summary>
public static T JsonDeserialize<T>(string jsonString)
{
//将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"\/Date(1294499956278+0800)\/"格式
string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";
MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);
Regex reg = new Regex(p);
jsonString = reg.Replace(jsonString, matchEvaluator);
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
T obj = (T)ser.ReadObject(ms);
return obj;
}

/// <summary>
/// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串
/// </summary>
private static string ConvertJsonDateToDateString(Match m)
{
string result = string.Empty;
DateTime dt = new DateTime(1970,1,1);
dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));
dt = dt.ToLocalTime();
result = dt.ToString("yyyy-MM-dd HH:mm:ss");
return result;
}

/// <summary>
/// 将时间字符串转为Json时间
/// </summary>
private static string ConvertDateStringToJsonDate(Match m)
{
string result = string.Empty;
DateTime dt = DateTime.Parse(m.Groups[0].Value);
dt = dt.ToUniversalTime();
TimeSpan ts = dt - DateTime.Parse("1970-01-01");
result = string.Format("\\/Date({0}+0800)\\/",ts.TotalMilliseconds);
return result;
}
}
}

第二步:建两个要用的实体类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace SerializationAndDeserialization.Code                           
{
public class Model1
{
public string code { get; set; }
public string description { get; set; }
}
}

public class Model2
{
public string name { get; set; }
public string age { get; set; }
public string sex { get; set; }
public Love love { get; set; }

}
public class Love
{

public string Play { get; set; }
public string Music { get; set; }
}

然后就是搞个测试案例啦:

1:序列化json:

private void test2()
{

List<Model2> list = new List<Model2>();

Love l = new Love();
l.Music = "音乐";
l.Play = "篮球";
Model2 m = new Model2();
m.name = "小明";
m.age = "18";
m.sex = "男";
m.love = l;

list.Add(m);

Love lo = new Love();
lo.Music = "唱歌";
lo.Play = "跳舞";
Model2 m1 = new Model2();
m1.name = "小王";
m1.age = "19";
m1.sex = "男";
m1.love = lo;
list.Add(m1);

string result = JsonHelp.JsonSerializer<List<Model2>>(list);
Response.Write(result);

}

2:先序列化再反序列化效果:

private void test1()
{
Model1 m = new Model1();
m.code = "00000";
m.description = "成功了";
string result = JsonHelp.JsonSerializer<Model1>(m);

Model1 mm = JsonHelp.JsonDeserialize<Model1>(result);
Response.Write(mm.description + "......" + mm.code);
//Response.Write(result);
}

但是。。。。对于一个如果复杂的json来说,你还想按照json视图去写实体类吗?再说建实体类 个人觉得很麻烦,岂不是不同的json格式就要写一个实体类,不是很好的选择。。。

下面就写个利用Newtonsoft.Json和dynamic类型的组合引用解析json:

json格式为:

{
"SvcCont": [
{
"PUB_REQ": {
"TYPE": "ADD_TEST_BEAN"
},
"result": {
"resultCode": "0",
"resultData": {
"accountNumber": "05519430313",
"areaID": "0001",
"servicetype": 201,
"vbRestValue": 0,
"vbTotalValue": 0
},
"resultMsg": "成功"
}
}
],
"TcpCont": {
"LatnCd": "551",
"ServiceCode": "FUNC99002",
"SrcOrgID": "30",
"SrcSysID": "1030",
"SrcSysSign": "5273C8FD1C9B483A1A8BC49BAF363987",
"TransactionID": "20140709101229"
}
}

下面我就说如何得到:resultCode 和resultMsg的值 !

//模拟json字符串

string ss = "{\"SvcCont\":[{\"PUB_REQ\":{\"TYPE\":\"ADD_TEST_BEAN\"},\"result\":{\"resultCode\":\"0\",\"resultData\":{\"accountNumber\":\"05519430313\",\"areaID\":\"0001\",\"servicetype\":201,\"vbRestValue\":0,\"vbTotalValue\":0},\"resultMsg\":\"成功\"}}],\"TcpCont\":{\"LatnCd\":\"551\",\"ServiceCode\":\"FUNC99002\",\"SrcOrgID\":\"30\",\"SrcSysID\":\"1030\",\"SrcSysSign\":\"5273C8FD1C9B483A1A8BC49BAF363987\",\"TransactionID\":\"20140709101229\"}}";

//一步一步去解析,根据自己的要求和json格式一层一层反序列化

if (ss.StartsWith("{") && ss.EndsWith("}")
|| ss.StartsWith("[") && ss.EndsWith("]"))
{
dynamic xx = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(ss);
dynamic resultData = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(xx.SvcCont.ToString());
List<dynamic> pags = Newtonsoft.Json.JsonConvert.DeserializeObject<List<dynamic>>(resultData.ToString());
foreach (var pag in pags)
{
dynamic pagss = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(pag.result.ToString());
string code = pagss.resultCode.ToString();
string msg = pagss.resultMsg.ToString();
Response.Write("code值为Code:" + code + ",mess的值为:" + msg);
}
}

好了,以上就是简单json序列化和反序列化的问题,希望对你有帮助!

关于json序列化和反序列的问题,没事写个案例,希望能帮到那些需要帮忙的朋友!的更多相关文章

  1. Newtonsoft.Json序列化和反序列之javascriptConvert.SerializeObject,DeserializeObject,JsonWriter,JsonReader

    这里下载:http://www.newtonsoft.com/products/json/安装:   1.解压下载文件,得到Newtonsoft.Json.dll   2.在项目中添加引用.. jav ...

  2. (转)Newtonsoft.Json序列化和反序列

    这里下载:http://www.newtonsoft.com/products/json/安装:   1.解压下载文件,得到Newtonsoft.Json.dll   2.在项目中添加引用.. 序列化 ...

  3. Newtonsoft.Json序列化和反序列

    这里下载:http://www.newtonsoft.com/products/json/安装:   1.解压下载文件,得到Newtonsoft.Json.dll   2.在项目中添加引用.. 序列化 ...

  4. c# Newtonsoft.Json序列化和反序列 js解析

    Newtonsoft.Json下载地址:http://www.newtonsoft.com/products/json/ 参考:      http://www.cnblogs.com/yanweid ...

  5. C# Json数组序列化和反序列总结

    1.创建json数组,例: JArray arrFile = new JArray(); arrFile.Add(new JObject() { new JProperty("FilePat ...

  6. WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化

    WPF中的常用布局   一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...

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

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

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

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

  9. WCF传输1-你是否使用过压缩或Json序列化?

    1.当遇到需要传输大量数据时,怎么样传输数据? 2.压缩数据有哪几种常见的方式? 问题1解答:通过压缩来传输数据 问题2解答: (1)WCF自带的压缩方式 (2)自定义WCF binding进行压缩 ...

随机推荐

  1. Linux netstat命令详解

    Linux netstat命令详解 一  简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多 ...

  2. React Native填坑之旅--Navigation篇

    React Native的导航有两种,一种是iOS和Android通用的叫做Navigator,一种是支持iOS的叫做NavigatorIOS.我们这里只讨论通用的Navigator.会了Naviga ...

  3. 每天记一些php函数,jQuery函数和linux命令(一)

    简介:学习完了php和jQuery之后,对函数的记忆不到位,导致很多函数没记住,所以为了促进自己的记忆,每天花一点时间来写这个博客. 时间:2016-12-18    地点:太原    天气:晴 一. ...

  4. AndroidManifest.xml中<activity></activity>相关属性说明

    虽说,从事android开发有一定时间了,对于Activity大家也都不陌生,但是具体的对于Activity中相关属性的含义有必要做一个系统的总结: intent-filteraction: 来指定响 ...

  5. JS——树形导航菜单(html的ul嵌套,jQuery的css(),show(),hide(),index()等方法)

    必备工具:jquery库文件.我这里用的是1.4版本的. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

  6. NSString进行urlencode编码

    今天在项目开发过程中,需要给webView传一个url,但是web端需要我将url中的一个变量进行urlencoding编码.这个主要原因是怕这个参数中存在一些转义字符,ok!这个没有问题,一开始我只 ...

  7. .Net MVC中的路由

    MVC中的URL也就是路由,不用通过路径访问实际的物理文件而达到向用户展示界面. URL的路由功能 一方面正向 映射到Controller和Action,根据用户输入的URL触发相应的控制器和对应方法 ...

  8. Java多线程15:Queue、BlockingQueue以及利用BlockingQueue实现生产者/消费者模型

    Queue是什么 队列,是一种数据结构.除了优先级队列和LIFO队列外,队列都是以FIFO(先进先出)的方式对各个元素进行排序的.无论使用哪种排序方式,队列的头都是调用remove()或poll()移 ...

  9. Dojo动画原理解析

    dojo中动画部分分为两部分:dojo/_base/fx, dojo/fx.dojo/_base/fx部分是dojo动画的基石,里面有两个底层API:animateProperty.anim和两个常用 ...

  10. 团队项目——站立会议DAY9

    第九次站立会议记录: 参会人员:张靖颜,钟灵毓秀,何玥,赵莹,王梓萱 项目进展: 1.张靖颜:部署总体战略,需求分析,反复运行程序并完善. 2.钟灵毓秀:近一步修改代码,并进行功能性的扩展,不断完善. ...