2

I have a xml file with following content:

<offer>
    ...
    <date type="Foo">Some value 1</date>
    <date type="Bar">Some value 2</date>
    <date type="Baz">Some value 3</date>
    ...
</offer>

And I have an enumeration like this:

public enum DateType
{
    Foo, Bar, Baz
}

And classes:

public class Date
{
    public DateType Type { get; set; }
    public string Value { get; set; }
}

public class Schedule
{
    ...
    public Date[] Dates { get; set; }
    ...
}

What I need to do that xml can be deserialized in this classes?

P.S. As a result I need Enum values to be mapped in public Date[] Dates { get; set; }.

1 Answers1

1

Use this classes:

public enum DateType
{
    Foo, Bar, Baz
}

[XmlRoot(ElementName = "date")]
public class Date
{
    [XmlAttribute(AttributeName = "type")]
    public DateType Type { get; set; }

    [XmlText]
    public string Value { get; set; }
}

[XmlRoot(ElementName = "offer")]
public class Offer
{
    [XmlElement(ElementName = "date")]
    public Date[] Dates { get; set; }
}

And deserialize with:

string lsXml = @"<offer>
<date type=""Foo"">Some value 1</date>
<date type=""Bar"">Some value 2</date>
<date type=""Baz"">Some value 3</date>
</offer>";

XmlSerializer loXmlSerializer = new XmlSerializer(typeof(Offer));
var loOffer = loXmlSerializer.Deserialize(new StringReader(lsXml)) as Offer;
foreach (var loDate in loOffer.Dates)
{
    Console.WriteLine($"{loDate.Type}: {loDate.Value}");
}
PinBack
  • 2,499
  • 12
  • 16