文档章节

DotNet的JSON序列化与反序列化

彭泽0902
 彭泽0902
发布于 2016/11/24 18:47
字数 482
阅读 5
收藏 0

   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序列化和反序列化方法。

© 著作权归作者所有

共有 人打赏支持
彭泽0902
粉丝 0
博文 44
码字总数 57771
作品 0
武汉
高级程序员
私信 提问
Hprose for Go 1.5.0 发布,微服务首选引擎

Hprose for Go 1.5.0 发布,更新内容如下: 更短的包路径:github.com/hprose/hprose-go 更小的核心包路径:github.com/hprose/hprose-go/io 修正了对非 utf-8 编码的字符串的序列化。 为 Ht...

andot
2015/05/27
3.4K
21
Hprose PHP 扩展 1.5.5 发布

Hprose PHP 扩展 1.5.5 与时俱进的发布,本次更新增加对新发布的PHP 7.0.0 Alpha 2的支持。 Hprose是高性能远程对象服务引擎(High Performance Remote Object Service Engine)的缩写。 它是...

andot
2015/06/26
3K
10
Hprose PHP 扩展 1.5.4 发布

Hprose 是高性能远程对象服务引擎(High Performance Remote Object Service Engine)的缩写。 它是一个先进的轻量级的跨语言跨平台面向对象的高性能远程动态通讯中间件。它不仅简单易用,而...

andot
2015/05/24
2.6K
12
Hprose for PHP 1.5.4 发布

Hprose 是高性能远程对象服务引擎(High Performance Remote Object Service Engine)的缩写。 它是一个先进的轻量级的跨语言跨平台面向对象的高性能远程动态通讯中间件。它不仅简单易用,而...

andot
2015/05/11
2.3K
9
.net remoting 抛出异常

版权声明:http://blog.csdn.net/lindexigd 本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lindexigd/article/details/82114730 本文告诉大家如何在使用 .net remotin...

lindexi_gd
08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

用PyTorch创建一个图像分类器?So easy!(Part 1)

摘要: 本文将为你介绍为何要重用神经网络?哪部分可以重用,哪部分不可以重用。了解完这些基础概念,你就可以自行创建一个图像分类器了。 经过了几个月的学习和实践,我完成了优达学城网站上...

阿里云官方博客
5分钟前
0
0
ssh使用正确的密码登录服务器被拒绝

1、用一个普通用户登录服务器被拒绝。 2、在服务器上,tail -f /var/log/secure, 看到: Dec 19 11:03:20 mmi5 sshd[11126]: pam_tally2(sshd:auth): user carrot (1003) tally 144, deny 3 ......

gelare
5分钟前
0
0
基于腾讯AI Lab词向量进行未知词、短语向量补齐与域内相似词搜索

AI Lab开源大规模高质量中文词向量数据,800万中文词随你用,质量非常高,就是一个词向量.txt文件都有16G之多,太夸张了。。不过的确非常有特点: ⒈ 覆盖率(Coverage): 该词向量数据包含...

火力全開
8分钟前
0
0
Shiro简介——《跟我学Shiro》

1、《跟我学Shiro》PDF完结版下载 2、shiro简介——《跟我学Shiro》 3、shiro demo

近在咫尺远在天涯
9分钟前
0
0
教你一个vue小技巧,一般人我不说的

本文由云+社区发表 1. 需求 最近的项目中,需要实现在vue框架中动态渲染带提示框的单选/多选文本框,具体的效果如下图所示,在输入框聚焦时,前端组件通过接收的kv参数渲染出选项,用户点击选...

腾讯云加社区
11分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部