2008-12-30 49 views
1

我在3-4方法序列化類對象的公共代碼,所以我想在所有的方法來創建該代碼和呼叫功能的普通函數如何建立DataContractJsonSerialize便利功能

我我從下面的代碼doingn這

DataContractJsonSerializer ser = new DataContractJsonSerializer(this.GetType()); 
       MemoryStream ms = new MemoryStream(); 
       ser.WriteObject(ms, this); 

       json = Encoding.Default.GetString(ms.ToArray()); 

       ms.Close(); 

我希望把seprate一般功能這個共同的代碼返回JSON字符串並接受全班作爲輸入參數,因爲我將全班成JSON對象,我試過創建功能如

公共字符串GenerateJsonString(C1級)

但是這是給我的關鍵字「類」錯誤,說類型是必需的

誰能告訴我怎麼可以接受seprate方法或函數

全班對象
+0

在不到3分鐘內完成六個答案! – 2008-12-30 20:15:43

回答

4

你混淆了一個「類」與「對象」。你序列化一個對象,它是一個特定類的實例(又名「類型」)。

您可以創建一個方法以.NET基類型的參數對所有對象,「對象」,如:

public static string GenerateJsonString(object o) 
{ 
    DataContractJsonSerializer ser = new DataContractJsonSerializer(o.GetType()); 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     ser.WriteObject(ms, o); 
     json = Encoding.Default.GetString(ms.ToArray()); 
     ms.Close(); 
     return json; 
    } 
} 
-1

嘗試使用類型,而不是

public string GenerateJsonString(Type t1) 
+0

如果您贊成,有膽量添加評論。 – JaredPar 2008-12-30 20:16:56

+0

如果你得到了低估,有膽量重新閱讀這個問題,看看你是否真的明白這一點。我給出了一個不正確的答案和一個問題的誤解。這完全不是個人的事 - 不要這樣做。 – TheSoftwareJedi 2008-12-30 20:54:05

0

您可以接受的對象。一個類沒有實例化,並且不能傳遞給該方法。

1

輸入參數爲「對象」。你不能傳遞一個類作爲參數,只有類的實例 - 這在OOP被稱爲「對象」

public string GenerateJsonString(object obj) 
1

如果所有要傳遞給此方法的對象的實例從一個公共基類派生的類,然後你可以使用多態性並編寫該方法來接受基類實例的對象。否則,所有類都來自System.Object

1

不清楚「class object」是什麼意思。如果你的意思是一個對象,那麼正常傳遞對象的引用會傳遞「整個對象」(以及對它的引用)。你可以得到所有的成員。

如果你想通過類型本身,你應該聲明參數爲Type - 但我懷疑這不是你想要的。

如果你想寫這將接受任何對象的方法,只是聲明參數爲Object類型:

public string GenerateJsonString(object x) 

個人而言,我不會用Encoding.Default(這是系統專用)二進制轉換順便說一句,序列化器使用的是什麼編碼?它是否允許您傳入TextWriter(例如StringWriter)而不是流?