使用XML序列化将属性放入不同的XML命名空间

我使用的是VSTS2008 + C#+ .Net 3.0。 我使用下面的代码来序列化XML,这是我当前的代码和序列化的XML文件。 我的目的是让MyInnerObjectProperties属于一个特殊的XML命名空间( http:// foo / 2009 )并将此命名空间作为默认命名空间。 任何想法如何实现这一点?

当前输出:

     Foo Type   Goo Type     

当前代码:

 public class MyClass { private MyObject[] _myObjectProperty; [XmlElement(IsNullable=false)] public MyObject[] MyObjectProperty { get { return _myObjectProperty; } set { _myObjectProperty = value; } } } public class MyObject { private MyInnerObject[] _myInnerObjectProperty; [XmlArrayItemAttribute("MyInnerObjectProperty", typeof(MyInnerObject), IsNullable=false)] public MyInnerObject[] MyInnerObjectProperties { get { return _myInnerObjectProperty; } set { _myInnerObjectProperty = value; } } } public class MyInnerObject { public string ObjectName; } public class Program { static void Main(string[] args) { XmlSerializer s = new XmlSerializer(typeof(MyClass)); FileStream fs = new FileStream("foo.xml", FileMode.Create); MyClass instance = new MyClass(); instance.MyObjectProperty = new MyObject[1]; instance.MyObjectProperty[0] = new MyObject(); instance.MyObjectProperty[0].MyInnerObjectProperties = new MyInnerObject[2]; instance.MyObjectProperty[0].MyInnerObjectProperties[0] = new MyInnerObject(); instance.MyObjectProperty[0].MyInnerObjectProperties[0].ObjectName = "Foo Type"; instance.MyObjectProperty[0].MyInnerObjectProperties[1] = new MyInnerObject(); instance.MyObjectProperty[0].MyInnerObjectProperties[1].ObjectName = "Goo Type"; s.Serialize(fs, instance); return; } } 

您需要创建一个XmlSerializerNamespaces对象,并将所需的命名空间添加到它。

XmlSerializerNamespaces对象包含XmlSerializer用于在XML文档实例中生成限定名称的XML名称空间和前缀。

在你的c#代码中:

 XmlSerializerNamespaces myNameSpaces = new XmlSerializerNamespaces(); myNameSpaces.Add("MyInnerObject", "http://foo/2009"); 

然后,向您的类添加一个属性,如下所示:

 public class MyInnerObject { [XmlElement(Namespace = "http://foo/2009")] 

更多信息:

http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializernamespaces.aspx

这个怎么样:

 [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; } } 

对我来说,这会产生:

      Foo Type   Goo Type