使用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