简体   繁体   English

具有相同元素名称的多个元素的C#xml序列化

[英]C# xml serialization of multiple elements with same element name

I have a xml file with following content: 我有一个具有以下内容的xml文件:

<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? 我需要做什么才能在此类中反序列化xml?

PS As a result I need Enum values to be mapped in public Date[] Dates { get; set; } PS因此,我需要将Enum值映射到public Date[] Dates { get; set; } public Date[] Dates { get; set; } public Date[] Dates { get; set; } . public Date[] Dates { get; set; }

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}");
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM