有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON、XML序列化和反序列化,今天就来总结下json的序列化和反序列化的实现,有写得不好的望园中博友多多指教。

json序列化和反序列化帮助类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.IO;
using System.Text.RegularExpressions;
using System.Web.Script.Serialization; namespace HelpClass.TypeHelp
{
/// <summary>
/// 在VS中需要添加引用System.Web.Script.Serialization的时候,请先引用System.Web.Extensions
/// </summary>
public class JsonHelp
{
/// <summary>
/// json序列化(非二进制方式)
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
/// <returns></returns>
public static string JsonSerializer<T>(T t)
{
JavaScriptSerializer jsonSerialize = new JavaScriptSerializer();
return jsonSerialize.Serialize(t);
} /// <summary>
/// json反序列化(非二进制方式)
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jsonString"></param>
/// <returns></returns>
public static T JsonDeserialize<T>(string jsonString)
{
JavaScriptSerializer jsonSerialize = new JavaScriptSerializer();
return (T)jsonSerialize.Deserialize<T>(jsonString);
} /// <summary>
/// JSON序列化(二进制方式,实体类使用[Serializable])
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
/// <returns></returns>
public static string JsonSerializerIO<T>(T t)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream())
{
ser.WriteObject(ms, t);
string jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return jsonString;
}
} /// <summary>
/// JSON反序列化(二进制方法,实体类使用[Serializable])
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jsonString"></param>
/// <returns></returns>
public static T JsonDeserializeIO<T>(string jsonString)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
{
T obj = (T)ser.ReadObject(ms);
return obj;
}
} }
}

上面这个类使用了两中json序列化形式。

1、  使用System.Web.Script.Serialization进行序列化和反序列化,不过在VS中需要添加引用System.Web.Script.Serialization的时候,请先引用System.Web.Extensions。

使用方法:

(1)需要序列化和反序列化的类

public class ddd
{
public string d1 { get; set; }
public string d2 { get; set; }
public string d3 { get; set; }
}

(2)序列化和反序列化

序列化单个类为json:

ddd a = new ddd { d1 = "", d2 = "", d3 = "" };
string stra = HelpClass.TypeHelp.JsonHelp.JsonSerializer<ddd>(a);
ddd dd2 = HelpClass.TypeHelp.JsonHelp.JsonDeserialize<ddd>(stra);
序列化类序列为json数组:
ddd a = new ddd { d1 = "", d2 = "", d3 = "" };
ddd b = new ddd { d1 = "", d2 = "", d3 = "" };
ddd c = new ddd { d1 = "", d2 = "", d3 = "" };
List<ddd> abc = new List<ddd>();
abc.Add(a);
abc.Add(b);
abc.Add(c);
string strabc = HelpClass.TypeHelp.JsonHelp.JsonSerializer<List<ddd>>(abc);
List<ddd> ddabc =HelpClass.TypeHelp.JsonHelp.JsonDeserialize<List<ddd>>(strabc);

2、  使用System.Runtime.Serialization.Json命名空间下的DataContractJsonSerializer类进行json的序列化和反序列化,该方法使用的二进制的方式来序列化和反序列化,使用该类方法时需要在对应的实体类中有相应的标识(如:[DataContract] [DataMember(Name = "")])在下面的调用时有相关说明。

使用方法:

(1)需要序列化和反序列化的类

[DataContract]
public class ddd
{
[DataMember(Name = "d1")]
public string d1 { get; set; }
[DataMember(Name = "d2")]
public string d2 { get; set; }
[DataMember(Name = "d3")]
public string d3 { get; set; }
}

(2)序列化和反序列化

序列化单个类为json:

ddd a = new ddd { d1 = "", d2 = "", d3 = "" };
string stra = HelpClass.TypeHelp.JsonHelp.JsonSerializer<ddd>(a);
ddd dd2 = HelpClass.TypeHelp.JsonHelp.JsonDeserialize<ddd>(stra);
序列化类序列为json数组:
ddd a = new ddd { d1 = "", d2 = "", d3 = "" };
ddd b = new ddd { d1 = "", d2 = "", d3 = "" };
ddd c = new ddd { d1 = "", d2 = "", d3 = "" };
List<ddd> abc = new List<ddd>();
abc.Add(a);
abc.Add(b);
abc.Add(c);
string strabc = HelpClass.TypeHelp.JsonHelp.JsonSerializer<List<ddd>>(abc);
List<ddd> ddabc =HelpClass.TypeHelp.JsonHelp.JsonDeserialize<List<ddd>>(strabc);

看完了上面的这些或许你已经对JSON的序列化和反序列化有了一定的了解,今天就写到这里,下次就总结一下XML的序列化和反序列化。

C#中JSON序列化和反序列化的更多相关文章

  1. Net中JSON序列化和反序列化处理(日期时间特殊处理)

    0  缘由 笔者最近在web api端使用Json.Net进行序列化处理,而在调用端使用DataContractSerializer进行反序列化,遇到日期时间处理反序列化不成功[备注:笔者使用Net ...

  2. 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变

    在net中json序列化与反序列化   准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ...

  3. 在net中json序列化与反序列化

    准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则: 数据在键值对中 数据由逗号分隔 花括 ...

  4. .Net中json序列化与反序列化

    NuGet中下载Newtonsoft.Json插件. public class JsonHelper<T>{ public static string ModelToJsonString( ...

  5. day5-python中的序列化与反序列化-json&pickle

    一.概述 玩过稍微大型一点的游戏的朋友都知道,很多游戏的存档功能使得我们可以方便地迅速进入上一次退出的状态(包括装备.等级.经验值等在内的一切运行时数据),那么在程序开发中也存在这样的需求:比较简单的 ...

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

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

  7. 在SpringMVC中,当Json序列化,反序列化失败的时候,会抛出HttpMessageNotReadableException异常, 当Bean validation失败的时候,会抛出MethodArgumentNotValidException异常,因此,只需要在ExceptionHandler类中添加处理对应异常的方法即可。

    在SpringMVC中,当Json序列化,反序列化失败的时候,会抛出HttpMessageNotReadableException异常, 当Bean validation失败的时候,会抛出Method ...

  8. Scala中使用 Jackson API 进行JSON序列化和反序列化

    1.  什么是 Json 序列化 和 反序列化 序列化 => 将 Java对象 转换成 json字符串反序列化 => 将 json字符串 转换成 Java对象 2. 依赖包 说明 < ...

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

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

随机推荐

  1. python中configparser模块

    python中的configparse模块的使用 主要用来解析一些常用的配置,比如数据配置等. 例如:有一个dbconfig.ini的文件 [section_db1] db = test_db1 ho ...

  2. C#设计模式系列:模板方法模式(Template Method)

    你去银行取款的时候,银行会给你一张取款单,这张取款单就是一个模板,它把公共的内容提取到模板中,只留下部分让用户来填写.在软件系统中,将多个类的共有内容提取到一个模板中的思想便是模板方法模式的思想. 模 ...

  3. 使用pudb调试python

    本博客主要用于讲解如何使用pudb进行python调试: 1.安装 sudo pip install pudb pip list查看安装结果: 2.使用 测试程序: #!/usr/bin/env py ...

  4. ASP.NET MVC之分部视图和ChildAction(三)

    前言 上节我们已经非常清晰并且明确的讲了@Html.ActionLink的作用,这一节我们开始讲讲分部视图以及孩子Action. 话题 在C#中我们知道继承的目的是为了代码的复用,在Web应用程序同样 ...

  5. Git 冲突合并

    在多人协作开发,经常遇到Git冲突,每次都不大记住命令.所以自己备注一下! git pull 之后有冲突: $ git pullremote: Counting objects: 5, done.re ...

  6. 利用xinetd进行时间同步

    时间同步,往往是大型项目里一个基本的需求:如果现在有多台服务器需要时间同步为标准时间,一般有如下两种做法: 一:NTP服务 将一台能上外网的服务器配成公网时间服务器(譬如:ntp服务配置文件中的0.r ...

  7. geotrellis使用(十六)使用缓冲区分析的方式解决投影变换中边缘数据值计算的问题

    Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 问题探索 采样说明 实现方案 总结 一.前言     ...

  8. android中ProgressBar和ListView

    ProgressBar进度条的使用情况: 进度条的.xml声明:如果不声明格式,则默认格式为转圆圈的形式,声明进度条的visibility为不可见. <ProgressBar android:i ...

  9. 基于 Hive 的文件格式:RCFile 简介及其应用

    转载自:https://my.oschina.net/leejun2005/blog/280896 Hadoop 作为MR 的开源实现,一直以动态运行解析文件格式并获得比MPP数据库快上几倍的装载速度 ...

  10. MVC中路由

    篇目 介绍 路线的性质 了解缺省路由 用一个例子的路由 结论 介绍 本文介绍了MVC中的路由.如何执行的路线是由路由引擎和如何定义的URL路由. ASP.NET MVC的路由是一个模式匹配系统,负责传 ...