简体   繁体   中英

Deserialise XML to List C#

I have an xml like this:

  <LookupResults>
    <LookupResult>
      <NumberOfMatches>1</NumberOfMatches>
      <MaxScore>90</MaxScore>
      <Entries>
        <Entry>
          <Uid>10400</Uid>
          <EntityScore />
          <EntityMaxScore>90</EntityMaxScore>
          <FirstName>Jose Epinemio</FirstName>
          <LastName>MOLINA GONZALEZ</LastName>
          <SdnType>Individual</SdnType>
          <ProgramName>SDNTK</ProgramName>
          <Citizenships>
            <Citizenship>
              <Uid>5614</Uid>
              <Country>Colombia</Country>
            </Citizenship>
          </Citizenships>
          <Nationalities>
            <Nationality>
              <Uid>5616</Uid>
              <Country>Colombia</Country>
            </Nationality>
          </Nationalities>
          <SDNIds>
            <SDNId>
              <Uid>5082</Uid>
              <IdType>Cedula No.</IdType>
              <Number>T.I. 57111-01681</Number>
              <Country>Colombia</Country>
            </SDNId>
          </SDNIds>
          <DateOfBirths>
            <DateOfBirth>
              <Uid>5615</Uid>
              <Dob>18 Nov 1957</Dob>
              <IsMainEntry>true</IsMainEntry>
            </DateOfBirth>
          </DateOfBirths>
          <AKAs>
            <AKA>
              <Uid>10209</Uid>
              <Type>a.k.a.</Type>
              <Category>weak</Category>
              <LastName>DANILO GARCIA</LastName>
            </AKA>
            <AKA>
              <Uid>10210</Uid>
              <Type>a.k.a.</Type>
              <Category>strong</Category>
              <FirstName>Jose Epimenio</FirstName>
              <LastName>MOLINA GONZALEZ</LastName>
            </AKA>
          </AKAs>
          <Addresses />
        </Entry>
      </Entries>
      <SourceList>
        <Threshold>85</Threshold>
        <PublishDate>2019-03-26T00:00:00</PublishDate>
        <DateUploaded>2019-03-31T20:56:33.037</DateUploaded>
        <RecordCount>7527</RecordCount>
        <SourceListName>OFAC</SourceListName>
      </SourceList>
    </LookupResult>
  </LookupResults>

and created classes like this:

[XmlRoot(ElementName = "Citizenship")]
public class Citizenship
{
    [XmlElement(ElementName = "Uid")]
    public string Uid { get; set; }
    [XmlElement(ElementName = "Country")]
    public string Country { get; set; }
}

[XmlRoot(ElementName = "Nationality")]
public class Nationality
{
    [XmlElement(ElementName = "Uid")]
    public string Uid { get; set; }
    [XmlElement(ElementName = "Country")]
    public string Country { get; set; }
}

[XmlRoot(ElementName = "SDNId")]
public class SDNId
{
    [XmlElement(ElementName = "Uid")]
    public string Uid { get; set; }
    [XmlElement(ElementName = "IdType")]
    public string IdType { get; set; }
    [XmlElement(ElementName = "Number")]
    public string Number { get; set; }
    [XmlElement(ElementName = "Country")]
    public string Country { get; set; }
}

[XmlRoot(ElementName = "SDNIds")]
public class SDNIds
{
    [XmlElement(ElementName = "SDNId")]
    public SDNId SDNId { get; set; }
}

[XmlRoot(ElementName = "DateOfBirth")]
public class DateOfBirth
{
    [XmlElement(ElementName = "Uid")]
    public string Uid { get; set; }
    [XmlElement(ElementName = "Dob")]
    public string Dob { get; set; }
    [XmlElement(ElementName = "IsMainEntry")]
    public string IsMainEntry { get; set; }
}

[XmlRoot(ElementName = "AKA")]
public class AKA
{
    [XmlElement(ElementName = "Uid")]
    public string Uid { get; set; }
    [XmlElement(ElementName = "Type")]
    public string Type { get; set; }
    [XmlElement(ElementName = "Category")]
    public string Category { get; set; }
    [XmlElement(ElementName = "LastName")]
    public string LastName { get; set; }
    [XmlElement(ElementName = "FirstName")]
    public string FirstName { get; set; }
}

[XmlRoot(ElementName = "Entry")]
public class Entry
{
    [XmlElement(ElementName = "Uid")]
    public string Uid { get; set; }
    [XmlElement(ElementName = "EntityScore")]
    public string EntityScore { get; set; }
    [XmlElement(ElementName = "EntityMaxScore")]
    public string EntityMaxScore { get; set; }
    [XmlElement(ElementName = "FirstName")]
    public string FirstName { get; set; }
    [XmlElement(ElementName = "LastName")]
    public string LastName { get; set; }
    [XmlElement(ElementName = "SdnType")]
    public string SdnType { get; set; }
    [XmlElement(ElementName = "ProgramName")]
    public string ProgramName { get; set; }
    [XmlElement(ElementName = "Citizenships")]
    public List<Citizenship> Citizenships { get; set; }
    [XmlElement(ElementName = "Nationalities")]
    public List<Nationality> Nationalities { get; set; }
    [XmlElement(ElementName = "SDNIds")]
    public List<SDNId> SDNIds { get; set; }
    [XmlElement(ElementName = "DateOfBirths")]
    public List<DateOfBirth> DateOfBirths { get; set; }
    [XmlElement(ElementName = "AKAs")]
    public List<AKA> AKAs { get; set; }
    [XmlElement(ElementName = "Addresses")]
    public string Addresses { get; set; }
}

[XmlRoot(ElementName = "SourceList")]
public class SourceList
{
    [XmlElement(ElementName = "Threshold")]
    public string Threshold { get; set; }
    [XmlElement(ElementName = "PublishDate")]
    public string PublishDate { get; set; }
    [XmlElement(ElementName = "DateUploaded")]
    public string DateUploaded { get; set; }
    [XmlElement(ElementName = "RecordCount")]
    public string RecordCount { get; set; }
    [XmlElement(ElementName = "SourceListName")]
    public string SourceListName { get; set; }
}

[XmlRoot(ElementName = "LookupResult")]
public class LookupResult
{
    [XmlElement(ElementName = "NumberOfMatches")]
    public string NumberOfMatches { get; set; }
    [XmlElement(ElementName = "MaxScore")]
    public string MaxScore { get; set; }
    [XmlElement(ElementName = "Entries")]
    public List<Entry> Entry { get; set; }
    [XmlElement(ElementName = "SourceList")]
    public SourceList SourceList { get; set; }

    public LookupResult()
    {
        Entry = new List<Entry>();
    }
}

public class LookupResultsData
{
    [XmlElement(ElementName = "LookupResult")]
    public List<LookupResult> LookupResults { get; set; }

    public LookupResultsData()
    {
        LookupResults = new List<LookupResult>();
    }
}

Now, deserialise the list like this:

      var xml = File.ReadAllText(@"C:\11_07.xml");

        var serializer = new XmlSerializer(typeof(LookupResultsData), new XmlRootAttribute("LookupResults"));
        using (var stringReader = new StringReader(xml))
        using (var reader = XmlReader.Create(stringReader))
        {
            var result = (LookupResultsData)serializer.Deserialize(reader);
            //Console.WriteLine(result);
        }

However, the entries column is empty. please help

[XmlArray("Entries")]
[XmlArrayItem("Entry")]
public List<Entry> Entry { get; set; }

Your use of [XmlElement("Entries")] is for lists without a parent element, ie

<LookupResult>
    ...
    <Entries>(an entry)</Entries>
    <Entries>(another entry)</Entries>
</LookupResult>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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