茫茫網海中的冷日 - 對這文章發表回應
茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1729337 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
F09_396.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

對這文章發表回應

發表限制: 非會員 可以發表

發表者: 冷日 發表時間: 2014/10/8 9:22:00

C# 的 Json 序列化和反序列化(JSON.NET)

On 2012/06/27, in C#, by Allen J

Json 是一種很 簡潔的資料格式
經常使用在資料傳輸
例如 Facebook API、Google Map API 等

JSON – 維基百科

JSON(Javascript Object Notation) 是一種輕量級的資料交換語言,以文字為基礎,且易於讓人閱讀。儘管JSON是在Javascript的一個子集,但JSON是獨立於語言的文本格式,並且採用了類似於C語言家族的一些習慣。

.NET Framework 支援 Json

C# 想當然會支援 Json 的轉換
不過在 .NET Framework 3.5 之後才有原生的類別庫
分別為
DataContractJsonSerializerJavaScriptSerializer
在操作上也很 麻煩
筆者選擇使用第三方類別庫 Json.NET
使用容易又不會有 .NET Framework 版本限制

JSON.NET 介紹

JSON.NET 是一個 高效能功能強大的第三方類別庫
支援多種格式的轉換及使用簡單

Features

  • Flexible JSON serializer for converting between .NET objects and JSON

  • LINQ to JSON for manually reading and writing JSON
  • High performance, faster than .NET’s built-in JSON serializers
  • Write indented, easy to read JSON
  • Convert JSON to and from XML
  • Supports .NET 2, .NET 3.5, .NET 4, Silverlight, Windows Phone and Windows 8 Metro.

效能

JSON.NET 與 .NET Framework 原生類別庫的效能比較

簡潔程式碼

可以透過 NuGet 安裝或直接下載類別庫
程式碼也簡單的不得了



//將物件轉成 Json 字串(序列化)
string output = JsonConvert.SerializeObject(book);
//將 Json 字串轉成物件(反序列化)
Book book = JsonConvert.DeserializeObject<Book>(output);

有一個功能筆者覺得是滿重要的
一般來說物件的 全部屬性都會被序列化
不過 JSON.NET 可以 指定物件屬性是否被序列化
例如 BOOK 類別的 Date 屬性
並不想被序列化成字串
可以使用 [JsonIgnore] 去忽略



[JsonObject(MemberSerialization.OptOut)]
public class Book
{
public int ID { get; set; }
public string Name { get; set; }
[JsonIgnore]
public string Author { get; set; }
}

或是使用 [JsonProperty] 去加入序列化



[JsonObject(MemberSerialization.OptIn)]
public class Book
{
[JsonProperty]
public int ID { get; set; }
[JsonProperty]
public string Name { get; set; }
public string Author { get; set; }
}

備註


因 C# 是 強型別的語言
所以要先 建立類別去產生物件
或是讓字串反序列化時 對應到類別



public class Book
{
public int ID { get; set; }
public string Name { get; set; }
public string Author { get; set; }
}

範例程式碼



Book book = new Book();
book.ID = 1;
book.Name = "百科全書";
book.Author = "無名氏";
string output = JsonConvert.SerializeObject(book);
Response.Write(output + "<br />");
Book book2 = JsonConvert.DeserializeObject<Book>(output);
Response.Write("ID = " + book2.ID + "<br />");
Response.Write("Name = " + book2.Name + "<br />");
Response.Write("Author = " + book2.Author + "<br />");

執行結果

參考資料:
Json.NET
c# 解析JSON的幾種方法
c#中的Json的序列化和反序列化
[C#]Json.NET – A high performance Json library



原文出處:C# 的 Json 序列化和反序列化(Json.NET) | Allen J
內容圖示
url email imgsrc image code quote
樣本
bold italic underline linethrough   












 [詳情...]
validation picture

注意事項:
預覽不需輸入認證碼,僅真正發送文章時才會檢查驗證碼。
認證碼有效期10分鐘,若輸入資料超過10分鐘,請您備份內容後,重新整理本頁並貼回您的內容,再輸入驗證碼送出。

選項

Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|