關於C# JSON 數據傳遞方式

分類:編程 時間:2017-02-03

我們都知道在互聯網發展的初期時代,那時候采用的還是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>> 寫法。 非常清晰

{
    "people":[
        {"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},
        {"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
        {"firstName":"Elliotte","lastName":"Harold","email":"cccc"}
    ]

一個復雜的Object 類:

{
    "programmers": [{
        "firstName": "Brett",
        "lastName": "McLaughlin",
        "email": "aaaa"
    }, {
        "firstName": "Jason",
        "lastName": "Hunter",
        "email": "bbbb"
    }, {
        "firstName": "Elliotte",
        "lastName": "Harold",
        "email": "cccc"
    }],
    "authors": [{
        "firstName": "Isaac",
        "lastName": "Asimov",
        "genre": "sciencefiction"
    }, {
        "firstName": "Tad",
        "lastName": "Williams",
        "genre": "fantasy"
    }, {
        "firstName": "Frank",
        "lastName": "Peretti",
        "genre": "christianfiction"
    }],
    "musicians": [{
        "firstName": "Eric",
        "lastName": "Clapton",
        "instrument": "guitar"
    }, {
        "firstName": "Sergei",
        "lastName": "Rachmaninoff",
        "instrument": "piano"
    }]
}


說了這麽多,開始正題,用C# 去操作JSON 然後進行傳遞數據,那麽今天的教程只會寫到如何生成和解析JSON 數據

在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>}




然後我們將類實例化:

1 2 3 4 Bean bean = new Bean(); bean.Id = "1234"; bean.name = "test"; bean.age = 12;

這步搞定之後,我們就需要生成JSON 數據了:

1 String json = JsonHelper.SerializeObject(bean);

OK,那麽這樣就生成成功了,我們來看看

1 {"id":"1234","name":"test","age":12}

顯然這樣是非常直觀的,那麽我們再將反轉成對象。

1 Bean bean = (Bean)JsonHelper.DeserializeJsonToObject({"id":"1234","name":"test","age":12});

非常簡單對不對。ok 這裏我們就完成了JSON 的簡單操作。更加復雜的LIST 和Map 這些可以參照API 自行解決。


Tags: 百度百科 移動互聯網 Object people C語言

文章來源:


ads
ads

相關文章
ads

相關文章

ad