2010-01-12 107 views
5

我剛寫了這個SerializationHelper類,但我不敢相信這是必要的!我真的需要寫這個「SerializationHelper」嗎?

using System.IO; 
using System.Xml.Serialization; 

public static class SerializationHelper 
{ 
    public static string Serialize<T>(T obj) 
    { 
     var outStream = new StringWriter(); 
     var ser = new XmlSerializer(typeof(T)); 
     ser.Serialize(outStream, obj); 
     return outStream.ToString(); 
    } 

    public static T Deserialize<T>(string serialized) 
    { 
     var inStream = new StringReader(serialized); 
     var ser = new XmlSerializer(typeof(T)); 
     return (T)ser.Deserialize(inStream); 
    } 
} 

而且它使用的是這樣的:

var serialized = SerializationHelper.Serialize(myObj); 

和:

在.NET框架
var myObj = SerializationHelper.Deserialize<MyType>(serialized) 

我缺少的東西?這不是航天科技!

+0

我在.NET框架中沒有看到任何東西來取代你的泛型序列化實現。 – 2010-01-12 16:20:45

+5

這可能是一個從-100開始的特徵(用於解釋http://blogs.msdn.com/ericlippert/archive/2009/06/15/making-it-easier.aspx)。 BCL設計人員一定不會認爲從xml字符串創建對象(反之亦然)是值得爲API添加特性的所有工作 - 尤其是*,因爲它不是火箭科學! – 2010-01-12 16:22:40

+0

正常情況下,序列化是T的函數,而不是通用的序列化器。這是因爲並不總是需要序列化類中的所有內容以便恢復它,因此具有特定知識的類是進行此活動的更好的消息靈通的地方。 – Lazarus 2010-01-12 16:24:20

回答

0

如果您在項目中進行任何實際數量(> 1)的序列化/反序列化,這很有用。我曾經有過這種情況,所以我只是在Utils庫中放入了一個類似的類,以及其他可重用的函數。

1

其實不然,在那裏你調用.NET API位是這些:

var ser = new XmlSerializer(typeof(T)); 
ser.Serialize(outStream, obj); 

var ser = new XmlSerializer(typeof(T)); 
var obj = (T) ser.Deserialize(inStream); 

的代碼的其餘部分是你個人的專業化。我不認爲這兩行代碼調用API太多了。你總是可以濃縮它們,例如

(new XmlSerializer(typeof(T))).Serialize(outStream, obj); 

var obj = (T) (new XmlSerializer(typeof(T))).Deserialize(inStream); 

純粹作爲不談,我要指出,我認爲在字符串變量存儲XML數據的代碼味道。只要將XML數據從其原始二進制表單(XDocument,XmlDocumentXPathDocument或任何其他類型的DOM)中取出,就會遇到編碼問題。如果開發人員將對象串行化爲帶有編碼X的字符串,然後將該字符串寫入具有編碼Y的磁盤文件?不是很安全。除此之外,如果編碼X不是UTF-16,你甚至會如何表示.NET字符串中的數據?

+0

你在最後一行錯過了T到T。 ..否則我得到一個「對象」。而且你正在離開你「凝結」的事實,我必須明確地提及類型名稱,我的解決方案忽略 – JoelFan 2010-01-12 16:46:22

+0

看得很清楚,我編輯了文本。 – 2010-01-12 16:49:40

+0

喬爾,我同意,這是很多打字。你必須問問自己,在什麼時候寫一個實用的方法來節省你自己的打字時間會浪費時間?如果你的方法真正節省了你的時間並使你的代碼更具可讀性,那麼這很好,保持它們。我所說的是,'XmlSerializer' API的設計者並不贊同你的觀點。 – 2010-01-12 16:52:15