C# 在 xml 反序列化中忽略父节点

C# ignore parent nodes in xml deserialization

这是我第一次 post 在这里,你可以想象,我只是 c# 的初学者。所以这是我的问题: 我正在将给定的 xml 反序列化为带有 XmlSerializer 的自定义 class。

XML:

<epg>
<program start="20160404234500" stop="20160405001000" channel="281479340566592">
    <eventid>604042345</eventid>
    <titles>
        <title>Schlauberger - Quizzen, was Spaß macht! (1)</title>
    </titles>
    <events>
        <event>27. Schlauberger - Quizzen, was Spaß macht!</event>
    </events>
    <descriptions>
        <description>27. Schlauberger - Quizzen, was Spaß macht!</description>
    </descriptions>
</program>
<program start="20160504234500" stop="20160505001000" channel="281479340566587">
    <eventid>604042348</eventid>
    <title>Schlauberger - Quizzen, was Spaß macht! (2)</title>
    <event>28. Schlauberger - Quizzen, was Spaß macht!</event>
    <description>28. Schlauberger - Quizzen, was Spaß macht!</description>
</program>

自定义 C# class:

public class Titles
{
    [XmlElement("title")]
    public string Title { get; set; }
}

public class SubTitles
{
    [XmlElement("event")]
    public string SubTitle { get; set; }
}

public class Descriptions
{
    [XmlElement("description")]
    public string Description { get; set; }
}

public class Program
{
    [XmlElement("eventid")]
    public string EventID { get; set; }
    [XmlElement("titles")]
    public Titles Titles { get; set; }
    [XmlElement("events")]
    public SubTitles SubTitles { get; set; }
    [XmlElement("descriptions")]
    public Descriptions Descriptions { get; set; }
    [XmlAttribute("start")]
    public string Start { get; set; }
    [XmlAttribute("stop")]
    public string Stop { get; set; }
    [XmlAttribute("channel")]
    public string Channel { get; set; }
    [XmlElement("title")]
    public string Title { get; set; }
    [XmlElement("event")]
    public string SubTitle { get; set; }
    [XmlElement("description")]
    public string Description { get; set; }
}

[XmlRoot(ElementName = "epg"), XmlType("epg")]
public class epg
{
    [XmlElement("program")]
    public List<Program> Program { get; set; }
}

目前没问题。但是正如你所看到的,因为 "title"、"event" 和 "description" 有时嵌套在多数中,有时不是,所以我可以在我后面的代码中有时通过列表访问属性,有时直接访问.这使得代码真的很不方便。
那么是否有可能以某种方式忽略多数并始终使用单个节点?

您可以向 Program class 添加一些辅助函数(或属性),例如:

public class Program
    {
        public Titles Titles { get; set; }

        public string Title { get; set; }

        public string GetTitle()
        {
            if (Titles != null)
            {
                return Titles.Title;
            }
            else
            {
                return Title;
            }
        }

    }