关于C# JSON 数据传递方式

来源:互联网 发布:拼图工厂软件下载 编辑:程序博客网 时间:2024/06/09 05:37

我们都知道在互联网发展的初期时代,那时候采用的还是C/S架构的程序。

那么软件和软件传递的数据格式也从普通的文本转换到了XML这种格式化的存储格式文本。

那么在互联网移动互联网时代,这种C/S传递XML这种格式文件显然是不行的。

那么今天就来搞搞JSON。

我们来看看百度百科的解释:

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

百度百科链接:http://baike.baidu.com/link?url=iu5RKjFjmnM5DtVOSTzMl8MsTxdhPCCkKWOyMnsI4zP9DPSC_Bxf-J8ZvgTymL0lfaao21iY9z_40TalfJHhLK

那么显然这种语言格式非常适合传递和解析,并且支持多种语言。

一个简单的JSON数据格式: 他包含了 一个KEY 和值 。写法是: {“KEY”:”VALUE”}

那么JSON 如果不支持负责的数据格式,那样显然是无法替代XML来作为传递的。

数组: [value,value]

复杂的集合:list ,map 等

更加复杂的结合体:

再复杂一点:

显然,看到这里 ,JSON的传递显然会符合你的要求:

我们再来看下标准的写法:一个标准的Map<List<Object>> 写法。 非常清晰

在C#中操作JSON 数据的类库有很多,这里我们用到Newtonsoft.Json.dll 这个动态库。

那么引入进去之后我们就要开始干活了,在Java 中常常喜欢讲操作以Utils 定义,而C#喜欢用Helper 来定义。那还是遵循C#的归还,我们来定义一个

JsonHelper.cs

using Newtonsoft.Json;using Newtonsoft.Json.Converters;using System.IO; namespace Helper{    public class JsonHelper    {        /// <summary>        /// 将对象序列化为JSON格式        /// </summary>        /// <param name="o">对象</param>        /// <returns>json字符串</returns>        public static string SerializeObject(object o)        {            string json = JsonConvert.SerializeObject(o);            return json;        }         /// <summary>        /// 解析JSON字符串生成对象实体        /// </summary>        /// <typeparam name="T">对象类型</typeparam>        /// <param name="json">json字符串(eg.{"ID":"112","Name":"石子儿"})</param>        /// <returns>对象实体</returns>        public static T DeserializeJsonToObject<T>(string json) where T : class        {            JsonSerializer serializer = new JsonSerializer();            StringReader sr = new StringReader(json);            object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T));            T t = o as T;            return t;        }         /// <summary>        /// 解析JSON数组生成对象实体集合        /// </summary>        /// <typeparam name="T">对象类型</typeparam>        /// <param name="json">json数组字符串(eg.[{"ID":"112","Name":"石子儿"}])</param>        /// <returns>对象实体集合</returns>        public static List<T> DeserializeJsonToList<T>(string json) where T : class        {            JsonSerializer serializer = new JsonSerializer();            StringReader sr = new StringReader(json);            object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>));            List<T> list = o as List<T>;            return list;        }         /// <summary>        /// 反序列化JSON到给定的匿名对象.        /// </summary>        /// <typeparam name="T">匿名对象类型</typeparam>        /// <param name="json">json字符串</param>        /// <param name="anonymousTypeObject">匿名对象</param>        /// <returns>匿名对象</returns>        public static T DeserializeAnonymousType<T>(string json, T anonymousTypeObject)        {            T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject);            return t;        }    }}



文中大多数是用实体转换过来的。那么我们在操作JSON 的时候最归还的做法是定义一个类,然后将该类实例化,最后进行转换。

如一个学生类:

namespace bean{    public class bean    {        /// <summary>        /// 该操作ID 方便操作        /// </summary>        private String id;         public String Id        {            get { return id; }            set { id = value; }        }        /// <summary>        /// name        /// </summary>        private String name;         public String Name        {            get { return name; }            set { name= value; }        }       <span class="crayon-c">/// <summary></span><div class="crayon-line crayon-striped-line" id="crayon-5800e4a4ad652458391162-2"><span class="crayon-h">        </span><span class="crayon-c">/// age</span></div><div class="crayon-line" id="crayon-5800e4a4ad652458391162-3"><span class="crayon-h">        </span><span class="crayon-c">/// </summary></span></div><div class="crayon-line crayon-striped-line" id="crayon-5800e4a4ad652458391162-4"><span class="crayon-h">        </span><span class="crayon-m">private</span><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">age</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-5800e4a4ad652458391162-5"> </div><div class="crayon-line crayon-striped-line" id="crayon-5800e4a4ad652458391162-6"><span class="crayon-h">        </span><span class="crayon-m">public</span><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-e">age</span></div><div class="crayon-line" id="crayon-5800e4a4ad652458391162-7"><span class="crayon-h">        </span><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="crayon-5800e4a4ad652458391162-8"><span class="crayon-h">            </span><span class="crayon-st">get</span><span class="crayon-h"> </span><span class="crayon-sy">{</span><span class="crayon-h"> </span><span class="crayon-st">return</span><span class="crayon-h"> </span><span class="crayon-v">age</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-5800e4a4ad652458391162-9"><span class="crayon-h">            </span><span class="crayon-st">set</span><span class="crayon-h"> </span><span class="crayon-sy">{</span><span class="crayon-h"> </span><span class="crayon-v">age</span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">value</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line crayon-striped-line" id="crayon-5800e4a4ad652458391162-10"><span class="crayon-h">        </span><span class="crayon-sy">}</span></div><table class="crayon-table "><tbody><tr class="crayon-row"><td class="crayon-nums " data-settings="hide"> </td></tr></tbody></table>}




然后我们将类实例化:

这步搞定之后,我们就需要生成JSON 数据了:

OK,那么这样就生成成功了,我们来看看

显然这样是非常直观的,那么我们再将反转成对象。

非常简单对不对。ok 这里我们就完成了JSON 的简单操作。更加复杂的LIST 和Map 这些可以参照API 自行解决。

0 0
原创粉丝点击