2010-04-07 25 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();