C#将特定的xml元素反序列化为自定义列表

时间:2017-02-28 12:48:19

标签: c# xml soap deserialization

我遇到了一个问题,我试图将所有销售期(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结构。

1 个答案:

答案 0 :(得分:0)

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

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

如果您只想要一个以&#34; Sales&#34;开头的元素名称列表你可以这样做:

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

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