【问题标题】:C# ignore parent nodes in xml deserializationC#在xml反序列化中忽略父节点
【发布时间】:2016-04-09 23:33:38
【问题描述】:

这是我在这里的第一篇文章,你可以想象,我只是 C# 的初学者。所以这是我的问题: 我正在使用XmlSerializer 将给定的 xml 反序列化为自定义类。

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# 类:

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

目前没有问题。但正如您所看到的,因为“标题”、“事件”和“描述”有时嵌套在多数中,有时不嵌套,我可以通过列表有时直接访问我以后代码中的属性。这使得代码真的很不方便。
那么是否有可能忽略大多数并始终使用单个节点?

【问题讨论】:

    标签: c# xml-parsing xml-deserialization


    【解决方案1】:

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

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

    【讨论】:

    • 我从来没有想过这么简单的解决方案。完美运行。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 2011-04-13
    • 2013-08-17
    • 2020-02-24
    • 1970-01-01
    相关资源
    最近更新 更多