2010-04-07 45 views
8

我想將一個類序列化爲xml並將其存儲在數據庫的字段中。我可以用這個序列化:將C#類序列化爲xml。將XML作爲字符串存儲在SQL Server中,然後再恢復類

StringWriter sw = new StringWriter(); 
XmlSerializer xmlser = new XmlSerializer(typeof(MyClass)); 

xmlser.Serialize(sw, myClassVariable); 
string s = sw.ToString(); 
sw.Close(); 

這是行得通的,但它有命名空間。

<.... xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 

這些會減慢反序列化的速度,因爲它會對那些進行驗證並驗證XML嗎?我被創建一個空白XmlSerializerNamespaces並使用該序列化擺脫了命名空間的,但隨後的XML仍然有大約整型變量的命名空間:

<anyType xmlns:q1="http://www.w3.org/2001/XMLSchema" 
     d3p1:type="q1:int" 
     xmlns:d3p1="http://www.w3.org/2001/XMLSchema-instance"> 
    3 
</anyType> 

我的問題是:是否有必要對反序列化,如果namesapces不,如何擺脫它們?我該如何告訴它字段是整數所以它並不放在「anytype類型」

感謝, 布賴恩

+0

如果您使用SQL Server 2005或更高,你應該使用XML列。 – 2010-04-07 06:37:52

回答

7

沒有,這些命名空間不會減慢deserialisation。這些URI不是串行化程序訪問的Web端點:它們只是標識符 - 正好使用Web URI方案以確保唯一性的標籤。您可以放心地讓他們在

+0

承認自己剛剛從答案中學到了一些新東西,這有多尷尬?我一直想知道這些命名空間。 – MusiGenesis 2010-04-07 02:12:27

+0

@MusiGenesis,關於你的查詢,根本不會令人尷尬。 – harpo 2010-04-07 02:14:19

+1

謝謝,我想知道爲什麼這麼多人都會努力把它們帶出去。 – BrianK 2010-04-07 02:39:42

0

順便說一句..如果你真的需要得到剝離出來的默認命名空間:

 XmlSerializer x = new XmlSerializer(msg.GetType()); 

     StringWriter sw = new StringWriter(); 

     var namespaces = new XmlSerializerNamespaces(); 
     namespaces.Add("", ""); 

     x.Serialize(sw, msg, namespaces); 

     string s = sw.ToString(); 
     sw.Close();