2011-06-21 32 views
7

我有,我想序列化JSON格式 我使用一個對象:如何排除某些成員被序列化爲Json?

public string ToJson() 
    { 
     JavaScriptSerializer jsonSerializer = new JavaScriptSerializer(); 
     string sJSON = jsonSerializer.Serialize(this); 
     return sJSON; 
    } 

如何定義「這個」不被序列化的一些領域?

回答

4

可能的方法是聲明這些字段爲privateinternal

替代解決方案是使用DataContractJsonSerializer類。在這種情況下,您將DataContract屬性添加到您的班級。您可以使用DataMember屬性來控制要序列化的成員 - 所有標記爲其的成員都是序列化的,而其他成員則不是。

你應該重寫你的toJSON方法如下:

public string ToJson() 
    { 
     DataContractJsonSerializer jsonSerializer = 
       new DataContractJsonSerializer(typeof(<your class name>)); 
     MemoryStream ms = new MemoryStream(); 
     jsonSerializer.WriteObject(ms, this); 
     string json = Encoding.Default.GetString(ms.ToArray()); 
     ms.Dispose(); 
     return json; 
    } 
2

退房的JavaScriptConverter類。您可以register converters爲特定對象類型定製序列化/反序列化過程。然後可以包含所需的屬性,而不對原始類進行任何更改。

+0

不錯,但我仍然很難,如果我想要一個字符串成員被序列化,而另一個字符串成員不是。對? –

+0

您基本上會返回一個鍵/值對的字典,因此您的自定義轉換器只需包含一個而不是另一個。你甚至可以根據它的值序列化每個成員(或不)。 – MikeWyatt

22
+2

+1。這是正確的答案。我很高興通讀了底部的答案,否則我會錯過這一點。精美的作品。 – gilly3

+0

它只適用於.NET 4.5 :( – karaxuna

+1

@karaxuna,它支持到3.5(這是當引入JavascriptSerializer時) – xr280xr

相關問題