JSON與JSON NET

由 andy 發表於 九月 15, 2011 / 尚無評論

何謂JSON

JSON(JavaScript Object Nonation) 是一種輕量級的[資料交換語言],以純文字為基底儲存和傳送的資料格式.說的白話一點是一種定義好用來做資料交換的格式(還是很饒舌),那就是一種功能上類似XML的東西.還無法參透的話請參考這篇。而JSONNET講的粗淺一點就是一隻用來把NET物件轉成JSON字串或者把JSON字串轉成物件的DLL

官方介紹:

Json.NET makes working with JSON formatted data in .NET simple. Quickly read and write JSON using LINQ to JSON or serialize your .NET objects with a single method call using the JsonSerializer.

這個組件使.NET可以更簡單快速的使用JSON格式的資料,並且使用LINQ去撈資料或者序列化(產生JSON字串)您的.NET物件

官方手冊

下載

整理使用筆記 : 

1. 下載後直接將/bin底下的dll加入參考,目前4版有對應2.0 3.5 後面沒有版號的目錄是4.0

2. 匯入命名空間

 

using Newtonsoft.Json;

using Newtonsoft.Json.Linq;

 

3. 物件轉JSON

第一種:傳統強型別直接轉

//實踐一個書本類別並帶入資料

 

TradtionBook tbook = new TradtionBook { Name = "OlderBook", Author = "AndyYou", ISBN = 123456, PubDate = new DateTime(2011,9,9) };

Console.WriteLine(JsonConvert.SerializeObject(tbook)); // 這樣就轉好了

//宣告一個書本的類別

public class TradtionBook

    {

        public string Name;

        public string Author;

        public int ISBN;

        public DateTime PubDate;

    }

 

第二種: 定義JSON物件類別

 

 [JsonObject(MemberSerialization.OptIn)]  //定義該類別可以序列化,白話文可以轉成JSON字串 後面OptIn / OptOut 用來設定裡面的屬性(Property)可否被序列化
   public class Book {
        public Book()
        { }
        [JsonProperty]
        public string BookName { get; set; }
        [JsonProperty]
        public string Author { get; set; }
        [JsonProperty]
        public int ISBN { get; set; }
    }

static void Main(string[] args){
            Book book = new Book { Author = "AndyYou", BookName = "Whats Up", ISBN = 957927 }; //實踐Book物件並帶入資料
            JsonSerializer s = new JsonSerializer(); //宣告JSON序列化物件
            s.NullValueHandling = NullValueHandling.Ignore; //設定遇到Null的值的時候忽略
            StringBuilder sb = new StringBuilder(); 
            StringWriter sw = new StringWriter(sb);
            JsonWriter jw = new JsonTextWriter(sw);

            s.Serialize(jw, book);
            Console.Write(sb.ToString()); // 轉成JSON字串了
}

 

第三種:動態設定JObject 理解上可以和第二種對應去應用

 

           JObject j = new JObject();
            j.Add(new JProperty("Name", "SomeBook"));
            j.Add(new JProperty("Author", "Ken"));
            j.Add(new JProperty("PubDate", new DateTime(1991, 1, 1)));
            JArray ja = new JArray();
            ja.Add(new JValue(1024));
            ja.Add(new JValue(90));
            ja.Add(new JValue(32767));
            j.Add(new JProperty("Record", ja));
            Console.WriteLine("Dynamic Object Expo : " + JsonConvert.SerializeObject(j));

 

4. JSON轉物件 提供下列幾種方式轉回物件

A.  JObject Jo1 = JObject.Parse(JsonString); //JsonString傳入的JSON字串

B. JObject Jo2 = JsonConvert.DeserializeObject<JObject>(JsonString);

C. 使用LINQ

 

var q = from p in ReObject2.Properties()
                    where p.Name == "Name"
                    select p;
Console.WriteLine((string)q.First().Value);

 

推薦參考文章

http://www.json.org/

http://blog.wu-boy.com/2011/04/%E4%BD%A0%E4%B8%8D%E5%8F%AF%E4%B8%8D%E7%9F%A5%E7%9A%84-json-%E5%9F%BA%E6%9C%AC%E4%BB%8B%E7%B4%B9/

http://james.newtonking.com/projects/json/help/

http://blog.darkthread.net/post-2010-06-05-json-net-jobject-example.aspx

http://blog.roodo.com/sholfen/archives/8679797.html

 

關於作者

喜愛閱讀心理學與程式,資訊技術相關書籍,電影偏愛血淋淋,需要動腦的懸疑解謎,災難科幻類型.平時運動:游泳,慢跑等...最愛的一句話: Divide and Conquer! 無法掌握現在,如何談及未來!目前職業是程式設計師.

評論

此文章尚無評論。

發表評論

*