XmlSerializer: Verhindern von xsi:type?

05/05/2010 - 14:16 von Jochen Kalmbach [MVP] | Report spam
Hallo,

ich wil in einer Liste unterschiedliche (abgeleitete) Objekte serializieren.
Der XmlSerializer erzeugt aber für jedes dieser Objekte ein Attribute
xsi:type="".

Ich möchte aber gerne, dass er anstelle des "xsi:type" einfach den
ElementNamen rausschreibt (und dies natürlich beim einlesen auch wieder
korrekt macht).

Hier ein kleines Beispiel:
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var m = new Main
{
Col = new BaseCollection
{
new Derived1 {Base1Prop =
"1", Derived1Prop = "2"},
new Derived2 {Base1Prop =
"3", Derived2Prop = "4"}
}
};

using (var sw = new StringWriter())
{
var ser = new XmlSerializer(typeof(Main));
ser.Serialize(sw, m);
Console.WriteLine(sw.ToString());

var o = ser.Deserialize(new
System.IO.StringReader(sw.ToString()));
Console.WriteLine(o);
}
}
}

public class Main
{
public BaseCollection Col { get; set; }
}

public abstract class Base
{
public string Base1Prop { get; set; }
}

[XmlInclude(typeof(Derived1))]
[XmlInclude(typeof(Derived2))]
public class BaseCollection : List<Base> { }

public class Derived1 : Base
{
public string Derived1Prop { get; set; }
}

public class Derived2 : Base
{
public string Derived2Prop { get; set; }
}
}

Bei mir führt dies zu dem Ergebnis:
<Main>
<Col>
<Base xsi:type="Derived1">
<Base1Prop>1</Base1Prop>
<Derived1Prop>2</Derived1Prop>
</Base>
<Base xsi:type="Derived2">
<Base1Prop>3</Base1Prop>
<Derived2Prop>4</Derived2Prop>
</Base>
</Col>
</Main>


ich möchte aber:
<Main>
<Col>
<Derived1>
<Base1Prop>1</Base1Prop>
<Derived1Prop>2</Derived1Prop>
</Derived1>
<Derived2>
<Base1Prop>3</Base1Prop>
<Derived2Prop>4</Derived2Prop>
</Derived2>
</Col>
</Main>

Gibt es dafür eine Lösung?

Greetings
Jochen

My blog about Win32 and .NET
http://blog.kalmbachnet.de/
 

Lesen sie die antworten

#1 Jochen Kalmbach [MVP]
06/05/2010 - 08:38 | Warnen spam
Habs gefunden... wenn ich mal veil Zeit hab, blogge ich mal drüber...

Greetings
Jochen

My blog about Win32 and .NET
http://blog.kalmbachnet.de/

Ähnliche fragen