.NET Framework官方的JSON類別簡單存取範例

這幾年來在操作JSON資料這一塊領域上,一直以來都是依賴好用到爆的Newtonsoft - Json.NET,缺點沒有,倒是要持續一直參考一個外部的.dll檔案,讓人覺得不是很方便。今天剛好有一點時間,讓我們來看看.NET Framework官方的JSON類別現在進化到甚麼樣的程度。

在網路上隨便搜尋關鍵字,連到MSDN映入我眼簾的就是DataContractJsonSerializer這個類別,決定就是你了皮卡丘,用這個類別前要先參考System.Runtime.Serialization.dll,如此一來你才可以調用到System.Runtime.Serialization.Json.*下面的類別。

DataContractJsonSerializer類別的存取範例程式碼

我們可以發現,DataContractJsonSerializer的寫入JSON字串,或者是讀取JSON字串,基本上都要透過串流,因此大量地使用到System.IO.MemoryStream是不可避免之事,當然,自己轉換字串也是躲不了的事情,話不多說,直接看程式碼吧!

class Program
{
  static void Main(string[] args)
  {
    //假資料
    Person[] oTemp = new Person[]
    {
      new Person { cName = "王小名", iAge = 18 },
      new Person { cName = "李大華", iAge = 25 }
    };
    
    //啟動.NET官方JSON序列化物件
    System.Runtime.Serialization.Json.DataContractJsonSerializer oJson = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(Person[]));
    
    //將物件轉成字串
    string cJsonResult;
    using (System.IO.MemoryStream oMS = new System.IO.MemoryStream())
    {
      oJson.WriteObject(oMS, oTemp);
      cJsonResult = System.Text.Encoding.UTF8.GetString(oMS.ToArray());
    }
    WriteLine(cJsonResult);
    
    //將字串轉回物件
    Person[] oPersons;
    using (System.IO.MemoryStream oMS = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(cJsonResult)))
    {
      oPersons = (Person[])oJson.ReadObject(oMS);
    }
    foreach (var p in oPersons)
    {
      WriteLine(p.cName);
      WriteLine(p.iAge);
    }
  }
}

//ORM
public class Person
{
  public string cName { get; set; }
  public int iAge { get; set; }
}

結論

DataContractJsonSerializer連個泛型或支援Anonymous Type都沒有,也就是說如果沒有特殊狀況或需求,以後我還是會繼續使用Json.NET,謝謝再聯絡。

JsonData .NETFramework DataContractJsonSerializer