zoukankan      html  css  js  c++  java
  • 前端JS 与 后台C# 之间JSON序列化与反序列化(笔记)

      JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。

       在 前端浏览器 和 后端服务器 之间通常会使用 JSON格式的数据 来进行数据交互,而JSON格式的数据在 前端Javascript  和 后端C# 语言中 最终都会以对象的形式来使用,而 JSON格式的数据在http协议中是以JSON字符串的形式进行传输 的,所以就涉及到JSON字符串与对象之间的相互转换问题。

        

    首先,我们来看一下一个C#的类变量数据是怎么从后端C#走向前端Javascript的。

     

        

    源码如下:

    (C#对象  ==>   json字符串)

            /// <summary>
            /// Json字符转换的配置对象,设置了基本Json配置的信息
            /// </summary>
            private static readonly JsonSerializerSettings Settings = 
                new JsonSerializerSettings {
    
                    //忽略循环引用,如果设置为Error,则遇到循环引用的时候报错(建议设置为Error,这样更规范)
                    ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
    
                    //日期格式化,默认的格式也不好看
                    DateFormatString = "yyyy-MM-dd HH:mm:ss",
    
                    //json中属性开头字母小写的驼峰命名
                    ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()
                };
    
            //根据配置规则得到json转换类
            private static JsonSerializer scriptSerializer = JsonSerializer.Create(Settings);
    
            /// <summary>
            /// 将任意一个对象转换为json字符串的表示形式
            /// </summary>
            /// <param name="obj">要转换成json字符串的对象</param>
            /// <returns>转换后的json字符串,失败则返回null</returns>
            public static string ConvertToJsonStr(object obj)
            {
                try
                {
                    StringWriter stringWriter = new StringWriter();
                    scriptSerializer.Serialize(stringWriter, obj);
    
                    return stringWriter.ToString();
                }
                catch
                {
                    return null;
                }
                
            }

    (json字符串   ==>   javascript对象)

    var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'}

    然后,再反过来看一下一个Javascript的变量数据又是怎么一步步走向C#后端的。

        

    源码如下:

    (json字符串  ==>  c#对象)

            /// <summary>
            /// 将json字符串转换成对象
            /// </summary>
            /// <typeparam name="T">要转换成的类型</typeparam>
            /// <param name="jsonStr">json字符串</param>
            /// <returns>成功转换返回对象,否则返回null</returns>
            public static T JsonStrToObject<T>(string jsonStr)
            {
                try
                {
                    JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
    
                    return javaScriptSerializer.Deserialize<T>(jsonStr);
                }
                catch
                {
                    return default(T);
                }
    
            }    

    (javascript对象   ==>   json字符串)

    var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'

    补充: 

       在这里之所以不使用.NET自带的 JavaScriptSerializer 类来进行对象到 JSON 字符串之间的转换,是因为在解析日期格式的数据时有缺陷,而使用 Newton.json 能弥补这种缺陷。 
       其实,我们使用Jquery进行AJAX编程的时候,Jquery提供的ajax函数已经在内部封装了由JSON字符串转换成JavaScript对象的机制,所以很多时候我们并不需要自己动手实现 (json字符串 ==> javascript对象) 转换。 
  • 相关阅读:
    每日英语:Apple's Latest iPhone Puts Focus Back on Fingerprint Security
    每日英语:Stressed at Work? Reflect on the Positive
    每日英语:Hold On: Reasons For Never Giving Up Your Dream
    每日英语:China's New Anti-Graft Website: A Tale of Tigers, Flies and Bath Tubs
    每日英语:China Overtakes U.S. in Number of Diabetes Cases
    每日英语:New Reason To Get The Kids To Bed On Time
    每日英语:Why Are Items Pricier in China?
    每日英语:Burning Question / Does Reading In Dim Light Hurt Your Eyes?
    每日英语:Genetic Manipulation Extends Life of Mice 20%
    架构设计之Spring-Session分布式集群会话管理
  • 原文地址:https://www.cnblogs.com/MaMaNongNong/p/9182478.html
Copyright © 2011-2022 走看看