HOW TO:序列化及還原序列化 JSON 資料
JSON (JavaScript 物件標記法) 是一種有效率的資料編碼格式,可以在用戶端瀏覽器與啟用 AJAX 的 Web 服務之間啟用快速的小量資料交換作業。
本主題示範如何將 .NET 型別物件序列化為 JSON 編碼資料,然後透過 DataContractJsonSerializer,將 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;
}