2011-05-10 67 views
3

我很新手,C#混爲一談。我已經開始使用SGEN生成的XmlSerializers.dll,我現在很困惑。儘管我找不到任何真正的一步一步教程如何正確使用它,但我也對不同的建議感到困惑。.XmlSerializers.dll如何使用它 - 通過例子在互聯網上

我讀了很多SGEN文章,我仍然不知道如何使用所產生的lib在我的項目。

請問誰擁有真正的編碼實踐與這家任何一個可以解釋我一勞永逸的正確方法使用它?

我在想,我懂得如何使用它,但是昨天我發現這個教程: http://www.dotnetfunda.com/articles/article1105-optimized-way-of-xml-serialization-using-sgen-utility-.aspx

的傢伙增加了.XmlSerializers.dll到他的項目引用和使用這樣的代碼,以序列化:

static string SerializebySGEN() 
{ 
    Person p = new Person(); 
    p.Age = 29; 
    p.Name = "Satya Narayan Sahoo"; 
    StringBuilder buildr = new StringBuilder(); 
    StringWriter writr = new System.IO.StringWriter(buildr); 
    PersonSerializer mySerialzer = new PersonSerializer(); 
    mySerialzer.Serialize(writr, p); 
    string str = writr.ToString(); 
    return str; 
} 

PersonSerializer mySerialzer = new PersonSerializer();

,但在過去有人計算器寫信給我連接到XmlSerializers另一個問題:

添加引用是沒有必要的, Xml序列總是試圖在 的 Assembly.Load()。反正XmlSerializers.dll程序集。 >另外,你永遠不會在代碼中直接引用生成的XmlSerializationWriterXxx 和XmlSerializationReaderXxx類 。

那麼誰是對的?可否告訴我,我應該如何將這個SGEN生成的庫用於我的項目和代碼?我真的想用好它! :)

編輯:也許我misudnerstood東西在引用的文章和兩個人有嗎?我迷路了:)

Edit2:我寫下面的方法來反序列化我的一個Serializable類(MySerializableClass),我使用SGEN生成的類MySerializableClassSerializer。這個可以嗎? (我認爲是這樣,PLZ確認;))

 /// <summary> 
     /// Deserializes the specified XML source into object using SGEN generated class. 
     /// </summary> 
     /// <typeparam name="T"></typeparam> 
     /// <param name="xmlSource">The XML source.</param> 
     /// <param name="isFile">if set to <c>true</c> the the source is a text File else it is a XML String.</param> 
     /// <returns>Return object with deserialized XML</returns> 
     public static MySerializableClass MySerializableClassSgenDeserialize(string xmlSource, bool isFile = true) 
     { 
      MySerializableClass data = new MySerializableClass(); 

      if (isFile) 
      { 
       using (TextReader textReader = new StreamReader(xmlSource)) 
       { 
        MySerializableClassSerializer xSerializer = new MySerializableClassSerializer(); 
        data = (MySerializableClass)xSerializer.Deserialize(textReader); 
       } 
      } 
      else 
      { 
       using (StringReader xmlText = new StringReader(xmlSource)) 
       { 
        MySerializableClassSerializer xSerializer = new MySerializableClassSerializer(); 
        data = (MySerializableClass)xSerializer.Deserialize(xmlText); 
       } 
      } 

      return data; 
     } 

回答

0

「添加引用不是必要的」意思就是 - 沒有必要。

有理由組件(和其他文件)添加到您的項目,即使你不打算引用它們。即如果您想創建安裝項目或發佈解決方案,您希望擁有需要部署的所有文件,以便從解決方案中引用,即使某些文件未被代碼直接使用。

我個人不推薦挖掘到這個話題太大作爲初始學習的expirience - 一般運行時生成的組件。大多數情況下工作。

+0

謝謝你的回答。這些方法是從SGEN的lib PersonSerializer mySerialzer = new PersonSerializer();在引用代碼中正確使用?或者我應該使用普通的XmlSerializer xSerializer = new XmlSerializer(typeof(T));?:|我想這個問題有點愚蠢,但我想確定:O :) – binball 2011-05-10 22:16:55

+0

在我的應用程序中,我使用生成的序列化類作爲我的對象,就像在這個例子中一樣,看起來很好(XmlSerializers.dll被加載等等。 ) – binball 2011-05-10 22:23:09

+0

你的代碼看起來很好。如果使用XmlSerializer xSerializer = new XmlSerializer(typeof(T));你不需要明確地添加引用。 – 2011-05-10 23:01:01