JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。在现在的通信中,较多的采用JSON数据格式,JSON有两种表示结构,对象和数组,JSON 数据的书写格式是:名称/值对。

在vs解决方案中以前采用xml树的形式,组织项目的结构。在新的.net core中,项目的解决方案采用json作为项目的结构说明。

在.net的前后台数据交互中,采用序列化对象为json,前端ajax接受传输数据,反序列化为对象,在页面对数据进行渲染。有关json的相关内容就不再赘述,在.net中序列化的类主要采用DataContractJsonSerializer类。

现在提供一个较为通用的json的序列化和反序列化的通用方法。

1.json的序列化:

        /// <summary>
/// 将对象序列化为JSON
/// </summary>
/// <typeparam name="T">序列化的类型</typeparam>
/// <param name="t">需要序列化的对象</param>
/// <returns>序列化后的JSON</returns>
public static string JsonSerializer<T>(T t)
{
if (t == null)
throw new ArgumentNullException("t");
string jsonString;
try
{
var ser = new DataContractJsonSerializer(typeof(T));
var ms = new MemoryStream();
ser.WriteObject(ms, t);
jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
//替换Json的Date字符串
const string p = @"\\/Date\((\d+)\+\d+\)\\/";
var matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);
var reg = new System.Text.RegularExpressions.Regex(p);
jsonString = reg.Replace(jsonString, matchEvaluator);
}
catch (Exception er)
{
throw new Exception(er.Message);
} return jsonString;
}

2.json的反序列化:

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

以上是一个较为简单的json序列化和反序列化方法。

DotNet的JSON序列化与反序列化的更多相关文章

  1. C#中JSON序列化和反序列化

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

  2. Newtonsoft.Json 序列化和反序列化 时间格式

    From : http://www.cnblogs.com/litian/p/3870975.html 1.JSON序列化 string JsonStr= JsonConvert.SerializeO ...

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

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

  4. Newtonsoft.Json 序列化和反序列化 时间格式 [转]

    1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg:   A a=new A(); a.Name="Elain ...

  5. C# JSON 序列化和反序列化——JavaScriptSerializer实现

    一. JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.您无法访问序列化程序的此实例.但是,此类公开了公共 API.因此, ...

  6. 序列化对象C++对象的JSON序列化与反序列化探索

    新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正 一:背景 作为一名C++开发人员,我始终很期待能够像C#与JAVA那样,可以省力的进行对象的序列化与反序列化,但到现在为止,还没有找 ...

  7. C++对象的JSON序列化与反序列化探索完结-列表的序列化与反序列化

    在前两篇文章中,我们已经完成对普通对象以及复杂对象嵌套的序列化与反序列化,见如下地址: C++对象的JSON序列化与反序列化探索 C++对象的JSON序列化与反序列化探索续-复杂对象的序列化与反序列化 ...

  8. C++对象的JSON序列化与反序列化探索续-复杂对象的序列化与反序列化

    本文是基本上一篇博文进行改进而成,上一篇请见: C++对象的JSON序列化与反序列化探索 此处就不多说了,直接上代码. 1. 序列化基类 #pragma once #include <strin ...

  9. C++对象的JSON序列化与反序列化探索

    一:背景 作为一名C++开发人员,我一直很期待能够像C#与JAVA那样,可以轻松的进行对象的序列化与反序列化,但到目前为止,尚未找到相对完美的解决方案. 本文旨在抛砖引玉,期待有更好的解决方案:同时向 ...

随机推荐

  1. [原创]MySQL RR隔离级别下begin或start transaction开启事务后的可重复读?

    Server version:         5.6.21-log MySQL Community Server (GPL) 前提提要: 我们知道MySQL的RR(repeatable read)隔 ...

  2. android 从服务器获取新闻数据并显示在客户端

    新闻客户端案例 第一次进入新闻客户端需要请求服务器获取新闻数据,做listview的展示, 为了第二次再次打开新闻客户端时能快速显示新闻,需要将数据缓存到数据库中,下次打开可以直接去数据库中获取新闻直 ...

  3. apache 使用htaccess自定义路由机制

    先开启伪静态.详情查看这篇文章:http://www.cnblogs.com/CyLee/p/5544119.html 然后在项目根目录中新建一个.htaccess文件,加入以下代码 正则中()的变量 ...

  4. Js函数的概念、作用、创建、调用!

    一.函数是用来帮助我们封装.调用代码的最方便的工具! 二.函数的创建方法有三种: 三.函数的创建方式有3种,调用方式也不是单一的,调用方式有4种!      1.作为一个函数去调用 函数名+();(函 ...

  5. SQL Server 2012大幅增强T-SQL

    SQL Server 2012对T-SQL进行了大幅增强,其中包括支持ANSI FIRST_VALUE和LAST_VALUE函数,支持使用FETCH与OFFSET进行声明式数据分页,以及支持.NET中 ...

  6. ABP理论学习之日志记录

    返回总目录 本篇目录 服务端 获取Logger 基类中的Logger 配置 客户端 服务端 ABP使用的是Castle Windsor的日志记录设备.它可以和不同的日志类库一起工作,比如Log4Net ...

  7. 进一步封装highchart,打造自己的图表插件:jHighChart.js

    Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表.支持的图表类型有曲线图.区域图.柱状图.饼状图.散状点图和综合 ...

  8. SQL Server 深入解析索引存储(中)

    标签:SQL SERVER/MSSQL SERVER/数据库/DBA/索引体系结构/堆 概述 本篇文章是关于堆的存储结构.堆是不含聚集索引的表(所以只有非聚集索引的表也是堆).堆的 sys.parti ...

  9. 使用border做三角形

    网站上经常会使用一些三角形,除了图片的方式,实际上利用border我们可以做出纯CSS的三角形.我们知道border是个边抖可以单独设置,当四个边相交的时候他们是什么时候改变的? .t0{ margi ...

  10. SSH实战 · JAVA发送邮件相关

    发送激活邮件 电子邮箱:邮件服务器上的一块空间: 邮件服务器:类比于web服务器(tomcat),有相应的服务器软件: 邮件协议:大公司发送和接收服务器分开,也可以都用一个服务器.           ...