1. 程式人生 > 實用技巧 >.NET處理Json的幾種方式

.NET處理Json的幾種方式

序列化裡的xml,soap,binary在上一篇文章裡面已經說過了,這篇主要說json。

json是目前非常流行的一種序列化資料的方式,很多api都採用的是json,結構簡潔,容易理解,適用性強,逐漸代替之前的xml在各個資料傳輸和儲存的領域的使用,比如VS Code的配置檔案:

json格式的結構很簡單,分號隔開的鍵值堆構成,逗號隔開,{}表示物件,[]表示集合,值可以是數字,字串,布林,陣列,物件,null,其他的一些細節請看規範資料即可。

下面就說說json序列化的幾種方式:

JavaScriptSerializer類

需要給專案引用System.Web.Extensions.dll,名稱空間是System.Web.Script.Serialization

,被序列化的類無需加任何特性

序列化和反序列化的程式碼如下:

JavaScriptSerializer js = new JavaScriptSerializer();
string json = js.Serialize(p);
Console.WriteLine(json);
Console.WriteLine("Serialization Done");

Person new_p = js.Deserialize<Person>(json);
Console.WriteLine(new_p.Name);

DataContractJsonSerializer類

需要引用System.Runtime.Serialization.dll

,名稱空間System.Runtime.Serialization.Json,被序列化的類需要加WCF資料契約一樣的特性來顯式宣告。

[DataContract]
public class Person
{
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public int Age { get; set; }
    [DataMember]
    public string Major { get; set; }
}

序列化程式碼如下:

DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Person));
MemoryStream ms = new MemoryStream();
js.WriteObject(ms,p);
ms.Position = 0;
string json = Encoding.Default.GetString(ms.ToArray());
Console.WriteLine(json);

MemoryStream ms_new = new MemoryStream(Encoding.Default.GetBytes(json));
Person pp = js.ReadObject(ms_new) as Person;
Console.WriteLine(pp.Name);

可以看出這個方式操作的是流,所以略微繁瑣一些。

Json.NET類庫,也就是大名鼎鼎的Newtonjson

Json.NEt類庫,地址https://www.newtonsoft.com/json

功能很多很強大,我這裡也只說一下最基本的。

直接通過Nuget可以安裝到專案中。

這是它的名稱空間,平常用到最多的是Newtonsoft.Json這個。常用到的類是JsonConvert工具類,方法DeserializeObjectDeserializeObject<T>SerializeObject

直接上程式碼,很容易看,這種泛型方法可以直接轉換成物件:

var json = JsonConvert.SerializeObject(p);
Console.WriteLine(json);

var pp = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine(pp.Name);

var jobj = JsonConvert.DeserializeObject(json) as JObject;
Console.WriteLine(jobj.GetType());
foreach (var item in jobj)
{
    Console.WriteLine($"{item.Key}:{item.Value}");
}

而要將一個json結構很方便的轉換為C#類,有專門的轉化網站,但最簡單的還是VS的選擇性貼上功能。

使用方法是:新建一個空cs檔案,裡面的東西都刪除乾淨。然後複製json內容,選擇VS的編輯選單的選擇性貼上功能,裡面有將json貼上為類和將xml貼上為類,有些轉換過來不符合.NET規範的可以通過DataContract或者DAtaMemember進行註解。

當然,也可以直接使用dynamic型別來實現對應功能,優缺點其實也就是dynamic的優缺點。

var json = JsonConvert.SerializeObject(ps);
Console.WriteLine(json);

dynamic persons = JsonConvert.DeserializeObject<dynamic>(json);
foreach (var item in persons)
{
    Console.WriteLine(item.Name);
}

轉載地址:https://www.cnblogs.com/newlifechou/p/8949377.html