zoukankan      html  css  js  c++  java
  • DotNet的JSON序列化与反序列化

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

  • 相关阅读:
    使用SDL2显示一张图片,SDL2上手贴
    两种方法操作其它mac应用的窗口
    golang子进程的启动和停止,mac与linux的区别
    自己动手,装一个液晶电视
    在Ubuntu上搭建kindle gtk开发环境
    macOS的OpenCL高性能计算
    量子计算及量子计算的模拟
    iPhone多次输入错误密码锁机后刷机恢复(原有内容会丢失)
    Day 2 总结
    Day 13 linux 的输入输出与管道的使用
  • 原文地址:https://www.cnblogs.com/pengze0902/p/6021341.html
Copyright © 2011-2022 走看看