JSON(JavaScript 對象符號)是一種高效的數據編碼格式,可用于在客戶端瀏覽器和支持 AJAX 的 Web 服務之間快速交換少量數據。
本主題演示如何使用 DataContractJsonSerializer 將 .NET 類型對象序列化為 JSON 編碼數據,然后將 JSON 格式的數據反序列化回 .NET 類型的實例。 此處的示例使用數據協定來演示用戶定義的 Person 類型的序列化和反序列化。
通 常,當在通過支持 AJAX 的終結點公開的服務操作中使用數據協定類型時,Windows Communication Foundation (WCF) 會自動處理 JSON 序列化和反序列化。 但是,在某些情況下您可能需要直接處理 JSON 數據,這正是本主題演示的方案。
注意:如果在服務器上的傳出答復的序列化期間發生錯誤或答復操作由于某種其他原因引發錯誤,則可能不會將其作為錯誤返回到客戶端。
本主題基于 JSON Serialization 示例。
定義 Person 的數據協定
-
通過將 DataContractAttribute 附加到類并將 DataMemberAttribute 屬性附加到要序列化的成員,為 Person 定義數據協定。 有關數據協定的更多信息,請參見 設計服務協定 。
[DataContract]
internal class Person
{
[DataMember]
internal string name;
[DataMember]
internal int age;
}
將 Person 類型的實例序列化為 JSON
-
創建 Person 類型的實例。
Person p = new Person();
p.name = "John";
p.age = 42; -
使用 DataContractJsonSerializer 將 Person 對象序列化為內存流。
MemoryStream stream1 = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person)); -
使用 WriteObject 方法將 JSON 數據寫入到流中。
ser.WriteObject(stream1, p);
-
顯示 JSON 輸出。
stream1.Position = 0;
StreamReader sr = new StreamReader(stream1);
Console.Write("JSON form of Person object: ");
Console.WriteLine(sr.ReadToEnd());
從 JSON 反序列化 Person 類型的實例
-
通過使用 DataContractJsonSerializer 的 ReadObject 方法,將 JSON 編碼數據反序列化為一個新的 Person 實例:
stream1.Position = 0;
Person p2 = (Person)ser.ReadObject(stream1); -
顯示結果。
Console.Write("Deserialized back, got name=");
Console.Write(p2.name);
Console.Write(", age=");
Console.WriteLine(p2.age);
示例

對于包含多個具有相同名稱的成員的數據協定,JSON 序列化程序將引發一個序列化異常,如以下示例代碼中所示。 |
[DataContract]
public class TestDuplicateDataBase
{
[DataMember]
public int field1 = 123;
}
[DataContract]
public class TestDuplicateDataDerived : TestDuplicateDataBase
{
[DataMember]
public new int field1 = 999;
}
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
