XmlSerialize två instanser av en klass?

Trädvy Permalänk
Medlem
Registrerad
Mar 2006

XmlSerialize två instanser av en klass?

Jag har skapat en klass utifrån ett xml-schema mha xsd.exe och har följdaktligen en klass som vi kan kalla för Produkt med två element, namn och pris.

Två instanser av klassen skapas:
Product p1 = new Product();
Product p2 = new Product();

p1.name = "Brödrost";
p1.price = "5";
p2.name = "Hårtork";
p2.price = "10";

Nu vill jag skapa en xml-fil som innehåller dessa två klasser men här brakar det åt skogen. Skriva ut en av instanserna går finfint genom att:

XmlSerializer serializer = new XmlSerializer(typeof(product));
FileStream fs = new FileStream("test.xml", FileMode.Create, FileAccess.Write);
serializer.Serialize(fs, p1);

Men om jag försöker t.ex.
serializer.Serialize(fs, p1);
serializer.Serialize(fs, p2);

så är problemet förstås att det bara får finnas ett root-element.

Hur är det tänkt att jag skall gå till väga här egentligen? Jag har meckat lite med att försöka skapa en ProductList-array men utan framgång.

Edit:
Har nu fixat till en liten ful-lösning som innebär att jag skickar klassen till en funktion som kör XmlSerialize, vilket returnerar en sträng. Strängen "städar" jag sedan från root-relaterad data.

Ungefär så här:
p.append("<?xml version="1.0".... osv";
p.Append("<root>");
foreach(...här körs funktionen jag beskriver ovan för varje instans av klassen Product och avslutar med p.Append(fixedString))
p.Append("</root>);
...skriver strängen p till filen test.xml

Nu har jag en fin och fungerande xml-fil, men är det känns ful-kodat. Finns det någon snyggare väg till Rom?

Trädvy Permalänk
Medlem
Plats
Falun
Registrerad
Jul 2001

Lägg dom (dina produkter) i en lista och serialisera sedan den..

EPoX 8RDA+, XP2500+, 2x256Mb PC3200 (DualCh), Club3D 9800PRO, Seagate 7200.7 160Gb 8Mb Limited edition

Trädvy Permalänk
Medlem
Registrerad
Mar 2006

Tack för svaret.

Menar du en ArrayList eller ett list-element som jag skapar i xsd-filen först, eller någon annan typ av lista?

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Maj 2007

Ett exempel, som är helt otestat men något liknande borde fungera;

[Serializable()] public class Product { public String Name { get; set; } public int Price { get; set; } public Product(name, price) { this.Name = name; this.Price = price; } } ... /* I serialiseringsmetoden */ List<Product> products = new List<Product>(); products.Add(new Product("Hammer", 20)); products.Add(new Product("Saw", 11)); XmlSerializer serializer = new XmlSerializer(typeof(List<Product>)); ...