using System;
using System.Collections;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var f = new XmlSerializer(typeof(TestClass), new[] { typeof(DerivedClass1), typeof(ChildNS.DerivedClass1) });
var ns = new XmlSerializerNamespaces();
ns.Add("ns", "http://yourcompany.org/schemas/ns");
ns.Add("nsc", "http://yourcompany.org/schemas/ns/child");
ns.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
using (var sw = new StringWriter())
{
f.Serialize(sw, new TestClass(), ns);
Console.WriteLine(sw.ToString());
}
}
}
public class TestClass
{
public BaseClass BaseTest = new BaseClass();
public BaseClass BaseTest1 = new DerivedClass1();
[XmlElement(Namespace = "http://yourcompany.org/schemas/ns/child")]
public BaseClass BaseTest2 = new ChildNS.DerivedClass1();
public BaseClass[] BaseArray1 = {new BaseClass(), new DerivedClass1()};
[XmlArrayItem(typeof(BaseClass), IsNullable = true),
XmlArrayItem(typeof(DerivedClass1), IsNullable = true),
XmlArrayItem(typeof(DerivedClass2), IsNullable = true)]
public BaseClass[] BaseArray2 =
{
new BaseClass(), new DerivedClass1(),
null, new DerivedClass2()
};
[XmlArrayItem(typeof(BaseClass), IsNullable = true)]
public BaseClass[] BaseArray3 =
{
new BaseClass(),
new DerivedClass1(), null, new DerivedClass2()
};
[XmlArrayItem(typeof(BaseClass))]
public List<BaseClass> BaseList = new List<BaseClass> { new BaseClass(), new DerivedClass1() };
[XmlElement(IsNullable = true)]
public object NullObject1 = null;
public object NullObject2 = null;
//public IEnumerable BaseListEnumerable = new List<BaseClass> { new BaseClass(), new DerivedClass1() };
}
public class BaseClass
{
[XmlAttribute("value1", Namespace = "http://yourcompany.org/schemas/ns")]
public int Value1;
[XmlAttribute("value2")]
public int Value2;
[XmlAttribute("value3", Namespace = "http://yourcompany.org/schemas/ns")]
public int Value3;
}
public class DerivedClass1 : BaseClass
{
[XmlAttribute("value4", Namespace = "http://yourcompany.org/schemas/ns")]
public int Value4;
}
public class DerivedClass2 : BaseClass
{
[XmlAttribute("value4", Namespace = "http://yourcompany.org/schemas/ns")]
public int Value4;
}
namespace ChildNS
{
//为类型强制指定 XML 名称,以及命名空间,以避免命名冲突。
[XmlType("ChildDerivedClass", Namespace = "http://yourcompany.org/schemas/ns/child")]
public class DerivedClass1 : BaseClass
{
public int Value5;
}
}
}