【问题标题】:C# deserialize specific xml elements into custom listC# 将特定的 xml 元素反序列化为自定义列表
【发布时间】:2017-02-28 12:48:18
【问题描述】:

我有一个问题,我试图将所有销售期(SalesYear、SalesToday...)XML 元素放入自定义 C# 列表中,其中所有销售期都应该是项目。

这是我正在反序列化的返回 XML:

<SalesStatisticsPartner>
    <PartnerId>137</PartnerId>
    <PartnerName>Humac DK</PartnerName>
    <LocalCurrency>DKK</LocalCurrency>
    <SalesYear>1252</SalesYear>
    <SalesYearPremium>1861548.0</SalesYearPremium>
    <SalesLastMonth>1241</SalesLastMonth>
    <SalesLastMonthPremium>1852359.0</SalesLastMonthPremium>
    <SalesMonth>11</SalesMonth>
    <SalesMonthPremium>9189.0</SalesMonthPremium>
    <SalesLastWeek>0</SalesLastWeek>
    <SalesLastWeekPremium>0.0</SalesLastWeekPremium>
    <SalesWeek>0</SalesWeek>
    <SalesWeekPremium>0.0</SalesWeekPremium>
    <SalesYesterday>0</SalesYesterday>
    <SalesYesterdayPremium>0.0</SalesYesterdayPremium>
    <SalesToday>0</SalesToday>
    <SalesTodayPremium>0.0</SalesTodayPremium>
</SalesStatisticsPartner>

这是我当前正在反序列化的 C# 类:

[XmlRoot(ElementName = "SalesStatisticsPartner"]
    public class SalesStatisticsPartner
    {   
        public int PartnerId { get; set; }

        public string PartnerName { get; set; }

        public List<SalesPeriod> SalesPeriods { get; set; }

        public string LocalCurrency { get; set; }

        public int SalesYear { get; set; }

        public double SalesYearPremium { get; set; }

        public int SalesLastMonth { get; set; }

        public double SalesLastMonthPremium { get; set; }

        public int SalesMonth { get; set; }

        public double SalesMonthPremium { get; set; }

        public int SalesLastWeek { get; set; }

        public double SalesLastWeekPremium { get; set; }

        public int SalesWeek { get; set; }

        public double SalesWeekPremium { get; set; }

        public int SalesYesterday { get; set; }

        public double SalesYesterdayPremium { get; set; }

        public int SalesToday { get; set; }

        public double SalesTodayPremium { get; set; }
    }

我想将每个销售期放入一个列表的原因是因为我需要在我的代码中遍历所有可能的销售期,不幸的是我无权更改 XML 结构。

【问题讨论】:

  • 有什么问题?对不起,但我真的不明白问题是什么。你能解释一下你想要做什么吗?也许有代码?

标签: c# xml soap deserialization


【解决方案1】:

您应该能够将 XML 加载到 XDocument 并提取信息。 例如,这将返回一个 Dictionary,其中包含元素名称(SalesYear 等)作为键,其值作为名称以“Sales”开头的每个元素的值:

xDoc.Root.Element("SalesStatisticsPartner").Elements().Where(e =&gt; e.Name.LocalName.StartsWith("Sales")).ToDictionary(e =&gt; e.Name.Localname, e =&gt; e.Value);

如果您只想要以“销售”开头的元素名称列表,您可以这样做:

xDoc.Root.Element("SalesStatisticsPartner").Elements().Where(e =&gt; e.Name.LocalName.StartsWith("Sales")).Select(e =&gt; e.Name.LocalName).ToList();

您可能必须根据 XML 的确切结构更改代码,但一般方法应该可行。

【讨论】:

    猜你喜欢
    • 2018-05-09
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 2010-12-20
    相关资源
    最近更新 更多