XmlSerializing inherited generic list



[XmlRoot(ElementName="Charges")]
publicclass Charges : List
{
private Charge _total;
public Charges()
{ }
[XmlElement(ElementName="Total")]
public Charge Total
{
get
{
return ((_total ==null) ?new Charge() : _total);
}
set
{
_total = ((value ==null) ?new Charge() : value);
}
}
}


The above code serializes to
<?xml version="1.0" encoding="utf-16"?>
<Charges>
<Charge>
<Description>Some fancy charge</Description>
<Detail>Charge for being too fancy</Detail>
<Amount>82.44</Amount>
</Charge>
<Charge>
<Description>Some fancy charge</Description>
<Detail>Charge for being too fancy</Detail>
<Amount>82.44</Amount>
</Charge>
</Charges>
How can I get Total to show up as:
<Total>
<Description>Total charge</Description>
<Detail>Total for all account charges</Detail>
<Amount>82.44</Amount>
</Total>
I need it to be inside the Charges element though. Any ideas?
[3131 byte] By [ClintStotesbery] at [2008-2-18]
# 1
The solution is to rename the list elements at the place where the list is exposed as a property, as follows:

public class Charges {
List<Charge> list = new List<Charge>();
public Charges() { }

[XmlElement("Total")]
public List<Charge> List {
get { return this.list; }
set { this.list = value; }
}
}

public class Charge {
public string Description;
public string Detail;
public decimal Amount;
public Charge() { }
public Charge(string description,
string detail,
decimal amount) {
this.Description = description;
this.Detail = detail;
this.Amount = amount;
}
}

Then the following works as you have requested:

Charges c = new Charges();
c.List.Add(
new Charge("Some fancy charge",
"Charge for being too fancy", 82.44m));
c.List.Add(
new Charge("More charges",
"For nothing in particular", 55.27m));

XmlSerializer s = new XmlSerializer(typeof(Charges));
s.Serialize(
Console.Out, c);

This produces:

<Charges>
<
Total>
<
Description>Some fancy charge</Description>
<
Detail>Charge for being too fancy</Detail>
<
Amount>82.44</Amount>
</
Total>
<
Total>
<
Description>More charges</Description>
<
Detail>For nothing in particular</Detail>
<
Amount>55.27</Amount>
</
Total>
</
Charges>

Enjoy!

ChrisLovett at 2007-9-9 > top of Msdn Tech,.NET Development,XML and the .NET Framework...

.NET Development

Site Classified