I have the following class structure which I want to serialize:
[XmlRoot("SomeClass")] public class SomeClass { private BaseClass[] _itemArray; public BaseClass[] ItemArray { get { return _itemArray; } set { _itemArray = value; } } public PPSPStatReportMessage() : base() { } } public class SomeOtherClass { private int _property5; [XmlAttribute("Property5")] public int Property5 { get { return _property5; } set { _property5 = value; } } private string _property6; [XmlText()] public string Property6 { get { return _property6; } set { _property6 = value; } } public SomeOtherClass() { } } [XmlInclude(typeof(DerivedClass1))] [XmlInclude(typeof(DerivedClass2))] [XmlRoot("BaseClass")] [XmlType("")] public class BaseClass { private string _property1; [XmlAttribute("Property1")] public string Property1 { get { return _property1; } set { _property1 = value; } } public SomeClass(string PropertyVal) { _property1 = PropertyVal; } } [XmlRoot("BaseClass")] [XmlTypeAttribute(Namespace = "")] public class DerivedClass1 : BaseClass { private string _property2; [XmlAttribute("Property2")] public string Property2 { get { return _property2; } set { _property2 = value; } } private SomeOtherClass _property3; [XmlElement("SomeOtherClass")] public SomeOtherClass Property3 { get { return _property3; } set { _property3 = value; } } public DerivedClass() : base("PropertyVal1") { } } [XmlRoot("BaseClass", Namespace = "")] [XmlType("")] public class DerivedClass2 : BaseClass { private Int64 _property4; [XmlAttribute("Property4")] public Int64 Property4 { get { return _property4; } set { _property4 = value; } } public DerivedClass2() : base("PropertyVal2") { } } And this is the method I use to serialize SomeClass:
public static string SerializeXML(object Value, System.Type ObjectType) { XmlSerializer serializer = new XmlSerializer(ObjectType); XmlSerializerNamespaces namespaceSerializer = new XmlSerializerNamespaces(); namespaceSerializer.Add("", ""); StringWriter ms = new StringWriter(); serializer.Serialize(ms, Value, namespaceSerializer); return ms.ToString(); } This method generates an XML structure that looks like the following:
<?xml version="1.0" encoding="utf-16"?> <SomeClass> <ItemArray> <BaseClass d3p1:type="DerivedClass1" Property1="PropertyVal1" Property2="123" xmlns:d3p1="http://www.w3.org/2001/XMLSchema-instance"> <SomeOtherClass Property5="0" >STRING DATA</SomeOtherClass> </BaseClass> <BaseClass d3p1:type="DerivedClass2" Property="PropertyVal2" Property4="456" xmlns:d3p1="http://www.w3.org/2001/XMLSchema-instance" /> </ItemArray> </SomeClass> However, I need to omit the d3p1:type and xmlns:d3p1 attributes and generate an XML structure that looks like this:
<?xml version="1.0" encoding="utf-16"?> <SomeClass> <ItemArray> <BaseClass Property1="PropertyVal1" Property2="123"> <SomeOtherClass Property5="0" >STRING DATA</SomeOtherClass> </BaseClass> <BaseClass Property="PropertyVal2" Property4="456" /> </ItemArray> </SomeClass> As you can see in the code, I've tried to use XmlType and XmlTypeAttribute, but without success.
Any advice on how can I generate the XML structure as described above (without d3p1:type and xmlns:d3p1 attributes)?