C# 使用XML序列化将属性放置到不同的XML命名空间中
我使用的是VSTS2008+C++.NET3.0。我使用下面的代码来序列化XML,这是我当前的代码和序列化的XML文件。我的目的是使MyInnerObjectProperties属于一个特殊的XML名称空间(),并将此名称空间作为默认名称空间。有什么办法可以实现吗 电流输出:C# 使用XML序列化将属性放置到不同的XML命名空间中,c#,.net,xml,visual-studio-2008,xml-serialization,C#,.net,Xml,Visual Studio 2008,Xml Serialization,我使用的是VSTS2008+C++.NET3.0。我使用下面的代码来序列化XML,这是我当前的代码和序列化的XML文件。我的目的是使MyInnerObjectProperties属于一个特殊的XML名称空间(),并将此名称空间作为默认名称空间。有什么办法可以实现吗 电流输出: <?xml version="1.0"?> <MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http:/
<?xml version="1.0"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MyObjectProperty>
<MyInnerObjectProperties>
<MyInnerObjectProperty>
<ObjectName>Foo Type</ObjectName>
</MyInnerObjectProperty>
<MyInnerObjectProperty>
<ObjectName>Goo Type</ObjectName>
</MyInnerObjectProperty>
</MyInnerObjectProperties>
</MyObjectProperty>
</MyClass>
您需要创建一个XmlSerializerNamespaces对象,并向其中添加所需的名称空间 该对象包含XmlSerializer用于在XML文档实例中生成限定名称的XML名称空间和前缀 在您的c#代码中: 然后,向类添加一个属性,如下所示:
public class MyInnerObject
{
[XmlElement(Namespace = "http://foo/2009")]
更多信息,请访问:
这个怎么样:
[XmlArrayItemAttribute( Namespace = "http://foo.com/2009" /* other attr. params. */ )]
public MyInnerObject[] MyInnerObjectProperties
{
get { ... }
set { ... }
}
试一试
对我来说,这产生了:
<?xml version="1.0" encoding="utf-8"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MyObjectProperty>
<MyInnerObjectProperties xmlns="http://foo.com/2009">
<MyInnerObjectProperty>
<ObjectName>Foo Type</ObjectName>
</MyInnerObjectProperty>
<MyInnerObjectProperty>
<ObjectName>Goo Type</ObjectName>
</MyInnerObjectProperty>
</MyInnerObjectProperties>
</MyObjectProperty>
</MyClass>
富型
粘液型
George,你什么时候停止使用.NET 3.5 SP1的?John,我正在做几个项目。其中一些是从scrach开发的,我将使用.NET3.5SP1+.NET2.0SP2。对于遗留项目,我将保留其原始.Net版本。很遗憾,LINQ不能用于基于.NET3.0的项目中。对我的问题有什么想法吗?我正在研究。我相信有人会在我面前得到答案的。谢谢罗伯特。我的目的不是将MyClass类的所有内容都添加到统一的命名空间中,而是只将MyInnerObjectProperties元素添加到命名空间“”中。我认为您的解决方案将把类MyClass中的所有元素添加到“”中,对吗?对我的问题有什么想法吗?你不必在全班都使用它。可以拾取并选择所需的元素和属性。看见
[XmlArrayItemAttribute( Namespace = "http://foo.com/2009" /* other attr. params. */ )]
public MyInnerObject[] MyInnerObjectProperties
{
get { ... }
set { ... }
}
public class MyObject
{
[XmlArrayItemAttribute("MyInnerObjectProperty", typeof (MyInnerObject),
IsNullable = false)]
[XmlArray(Namespace = "http://foo.com/2009")]
public MyInnerObject[] MyInnerObjectProperties { get; set; }
}
<?xml version="1.0" encoding="utf-8"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MyObjectProperty>
<MyInnerObjectProperties xmlns="http://foo.com/2009">
<MyInnerObjectProperty>
<ObjectName>Foo Type</ObjectName>
</MyInnerObjectProperty>
<MyInnerObjectProperty>
<ObjectName>Goo Type</ObjectName>
</MyInnerObjectProperty>
</MyInnerObjectProperties>
</MyObjectProperty>
</MyClass>