知识大全 asp.net JSON序列化与反序列化使用

Posted

篇首语:男儿欲遂平生志,六经勤向窗前读。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 asp.net JSON序列化与反序列化使用相关的知识,希望对你有一定的参考价值。

asp.net JSON序列化与反序列化使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  对JSON数据进行序列化和反序列化

  可以使用DataContractJsonSerializer类将类型实例序列化为JSON字符串 并将JSON字符串反序列化为类型实例 DataContractJsonSerializer在System Runtime Serialization Json命名空间下 NET Framework 包含在System ServiceModel Web dll中 需要添加对其的引用; NET Framework 在System Runtime Serialization中

  方法一 引入System Web Script Serialization命名空间使用 JavaScriptSerializer类实现简单的序列化序列化类 Personnel

代码如下   public class Personnel public int Id get; set; public string Name get; set;

  执行序列化反序列化

代码如下  

  protected void Page_Load(object sender EventArgs e) Personnel personnel = new Personnel(); personnel Id = ; personnel Name = "小白";

  JavaScriptSerializer jsonSerializer = new JavaScriptSerializer(); //执行序列化 string r = jsonSerializer Serialize(personnel);

  //执行反序列化 Personnel _Personnel = jsonSerializer Deserialize<Personnel>(r );

  

  r 输出结果 "Id": "Name":"小白"

  可以使用 ScriptIgnore属性标记不序列化公共属性或公共字段

代码如下   public class Personnel [ScriptIgnore] public int Id get; set; public string Name get; set;

  r 输出结果 "Name":"小白"

  方法二 引入 System Runtime Serialization Json命名空间使用 DataContractJsonSerializer类实现序列化

  序列化类 People

代码如下  

  

  public class People public int Id get; set; public string Name get; set;

  执行序列化反序列化

代码如下  

  protected void Page_Load(object sender EventArgs e) People people = new People(); people Id = ; people Name = "小白";

   DataContractJsonSerializer json = new DataContractJsonSerializer(people GetType()); string szJson = ""; //序列化 using (MemoryStream stream = new MemoryStream()) json WriteObject(stream people); szJson = Encoding UTF GetString(stream ToArray()); //反序列化 using (MemoryStream ms = new MemoryStream(Encoding UTF GetBytes(szJson))) DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(People)); People _people = (People)serializer ReadObject(ms);

  

  szJson输出结果 "Id": "Name":"小白"

  可以使用IgnoreDataMember:指定该成员不是数据协定的一部分且没有进行序列化 DataMember:定义序列化属性参数 使用DataMember属性标记字段必须使用DataContract标记类 否则DataMember标记不起作用

代码如下  

  

  [DataContract] public class People [DataMember(Name = "id")] public int Id get; set; [IgnoreDataMember] public string Name get; set;

  输出结果: "id":

  JSON序列化和反序列化日期时间的处理

  JSON格式不直接支持日期和时间 DateTime值值显示为“/Date( + )/”形式的JSON字符串 其中第一个数字(在提 供的示例中为 )是 GMT 时区中自 年 月 日午夜以来按正常时间(非夏令时)经过的毫秒数 该数字可以是负数 以表示之前的时间 示例中包括“+ ”的部分可选 它指示该时间属于Local 类型 即它在反序列化时应转换为本地时区 如果没有该部分 则会将时间反序列化为Utc

  修改Person类 添加LastLoginTime

代码如下   public class Person public string Name get; set; public int Age get; set; public DateTime LastLoginTime get; set; Person p = new Person(); p Name = "张三"; p Age = ; p LastLoginTime = DateTime Now; string jsonString = JsonHelper JsonSerializer<Person>(p);

  序列化结果

  "Age": "LastLoginTime":"/Date( + )/" "Name":"张三"

   在后台使用正则表达式对其替换处理 修改JsonHelper

代码如下   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; /// <summary> /// JSON序列化和反序列化辅助类 /// </summary> public class JsonHelper /// <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 UTF 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( + )/"格式 string p = @"d d d sd :d :d "; 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 UTF GetBytes(jsonString)); T obj = (T)ser ReadObject(ms); return obj; /// <summary> /// 将Json序列化的时间由/Date( + )转为字符串 /// </summary> private static string ConvertJsonDateToDateString(Match m) string result = string Empty; DateTime dt = new DateTime( ); dt = dt AddMilliseconds(long Parse(m Groups[ ] 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[ ] Value); dt = dt ToUniversalTime(); TimeSpan ts = dt DateTime Parse(" "); result = string Format("\\/Date( + )\\/" ts TotalMilliseconds); return result;

  序列化Demo

代码如下   Person p = new Person(); p Name = "张三"; p Age = ; p LastLoginTime = DateTime Now; string jsonString = JsonHelper JsonSerializer<Person>(p); 代码如下   "Age": "LastLoginTime":" : : " "Name":"张三" 反序列化Demo string json = ""Age": "LastLoginTime":" : : " "Name":"张三""; p=JsonHelper JsonDeserialize<Person>(json); cha138/Article/program/net/201311/14467

相关参考

知识大全 datatable序列化与反序列化

   //datatable序列化      publicstringgetSendDetailQuery(D

知识大全 php 中序列化和json使用介绍

  【序列化的概念】  序列化是将对象状态转换为可保持或可传输的格式的过程与序列化相对的是反序列化它将流转换为对象这两个过程结合起来可以轻松地存储和传输数据  将对象的状态信息转换为可以存储或传输的窗

知识大全 js实现json数据行到列的转换的实例代码

为了实现这样的数据显示出来三个序列分别为郑州新乡安阳的电量就需要自己实现对这样数据的转换转换成如下的形式   月份郑州电量新乡电量安阳电量这样Ext的图表就能把它显示成三个序列了我写了如下的

知识大全 asp.net后台cs中的JSON格式变量在前台Js中调用方法

asp.net后台cs中的JSON格式变量在前台Js中调用方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来

知识大全 js实现json数据行到列的转换

  为了实现这样的数据显示出来三个序列分别为郑州新乡安阳的电量就需要自己实现对这样数据的转换转换成如下的形式  月份郑州电量新乡电量安阳电量            这样Ext的图表就能把它显示成三个序

知识大全 浅谈Java对象的序列化和反序列化

浅谈Java对象的序列化和反序列化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  当两个进程在进

知识大全 读写序列化类的例子

  目的:保存序列化类到文件然后从文件中读取保存的序列化类  概念:序列化类:所谓序列化类实际上就是将类本身所有信息变成流格式进行保存传输等功能这点对于远程调用(RMI)非常重要可以将序列化类变成流格

知识大全 c#实体类序列化方法

  提到为了传递数据需要把作为载体的实体类序列化好好的找了一些序列化方面的介绍感觉下面的这个介绍比较容易介绍!  什么是序列化  序列化是将对象状态转换为可保持或传输的格式的过程在序列化过程中对象的公

知识大全 ios开发如何进行对象序列化和反序列化

cha138/Article/program/yd/201404/30432

知识大全 JavaIO 6—对象的序列化

JavaIO6—对象的序列化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对于对象的序列化可能