2012-10-02 35 views
1

是否有任何.Net庫可以接受一個對象並將其序列化爲一個Stream,作爲將創建該對象的C#代碼?我將如何獲得將在當前狀態下重新創建運行時對象的等效C#代碼?

Stream fs = ...; 

CSharpFormatter formatter = new CSharpFormatter(); 

var p = new Person { Name = "Russ", Address = "1024 Oak St" }; 

formatter.Serialize(fs, p); 

在本月底,FS最終會與像這樣寫一個字符串:

new Person { Name = "Russ", Address = "1024 Oak St" }; 

我覺得這樣的事情將是從棘手的運行情況編寫單元測試非常有用。

+0

我的圖片做代碼生成的東西。想象一下,當我發現一個特例時,我可以立即將參與對象序列化爲一個字符串......然後將該字符串粘貼到新的單元測試中。是的,我可以使用BinaryFormatter或XML或JSON。但是當我可以的時候,我非常喜歡編寫C#代碼。 –

+0

你的意思是序列化不可序列化的對象嗎? – Need4Steed

+0

我真的沒有任何需要DataContract或Serializable標記的問題。例如,我只是希望輸出成爲可以放入單元測試中的C#代碼。 –

回答

1

您可能會破解一個JSON序列化程序來執行此操作。鑑於你的Person對象,一個JSON序列可能返回類似:

{"name":"Russ","Address":"1024 Oak St"} 

從那裏,這是相當簡單的使用Split()Replace()去接近你想要什麼:

{ Name = "Russ", Address = "1024 Oak St" } 

剩下的只是窗戶裝飾。

+0

JSON無法在我的對象結構中處理循環,就像BinaryFormatter會。如果這個CSharpSerializer能夠處理複雜的場景,那將是非常好的。 –

+0

我在單元測試中使用了兩種靜態工具方法,'ToXml'和'FromXml '。當我想重新創建一個特定的對象時,我會對'Debug.Print'執行'ToXml',並將生成的XML複製/粘貼到'FromXml '調用中。 –

相關問題