2016-03-24 10 views
0

Ich habe ein Problem, wenn ich XML-Datei mit XmlSerializer lesen möchte. Meine XML-Datei wie folgt:So lesen Sie XML-Datei mit XmlSerializer C#

<?xml version="1.0" encoding="utf-8"?> 
<contents> 
    <section id="1"> 
    <element1>2</element1> 
    <element2>1</element2> 
    <idx>1</idx> 
    <idx>2</idx> 
    <idx>3</idx>  
    </section> 

    <section id="2"> 
    <element1>2</element1> 
    <element2>1</element2>  
    </section> 

    <section id="3"/> 
</contents> 

Hier sind die Klassen:

[Serializable()] 
public class section 
{ 
    [XmlAttribute("id")] 
    public string id { get; set; } 

    [XmlElement("element1")] 
    public int element1 { get; set; } 

    [XmlElement("element2")] 
    public int element2 { get; set; } 


    [XmlElement("idx")] 
    public int[] idx { get; set; } 


} 
    [Serializable()] 
    [XmlRoot("contents")] 
    public class contents 
    { 
     [XmlArray("section")] 
     [XmlArrayItem("section", typeof(section))] 
     public section[] section { get; set; } 
    } 

Die Deserialize Funktion:

   XmlSerializer serializer = new XmlSerializer(typeof(contents)); 


      FileStream fs = new FileStream(path, FileMode.Open); 
      XmlReader reader = XmlReader.Create(fs); 


      contents i; 


      i = (contents)serializer.Deserialize(reader); 
      fs.Close(); 




      foreach (section p in i.section) 
      { 
       Console.WriteLine(p.element1); 
      } 

Warum es nicht funktioniert? Ich hatte Referenz https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer(v=vs.110).aspx, aber es scheint nicht sinnvoll. Bitte helfen Sie mir !!!!!

+0

Du hast einige gute Informationen zur Verfügung gestellt, aber das scheint ein Duplikat zu sein. In jedem Fall ist es in der Regel eine gute Idee zu spezifizieren, was speziell nicht funktioniert - eine Ausnahme in der Serialisierung? Mitglieder nicht wie erwartet initialisiert? Meine Vermutung ist, dass Sie Probleme mit den Arrays haben, da sie nicht richtig eingerichtet sind. Siehe die verknüpfte Frage. –

Antwort

0

Try this ...

Usings ...

using System.Collections.Generic; 
using System.IO; 
using System.Xml.Serialization; 

Klassen ... (von Ihrem XML erstellt mit http://xmltocsharp.azurewebsites.net/)

[XmlRoot(ElementName = "section")] 
    public class Section 
    { 
     [XmlElement(ElementName = "element1")] 
     public string Element1 { get; set; } 
     [XmlElement(ElementName = "element2")] 
     public string Element2 { get; set; } 
     [XmlElement(ElementName = "idx")] 
     public List<string> Idx { get; set; } 
     [XmlAttribute(AttributeName = "id")] 
     public string Id { get; set; } 
    } 

    [XmlRoot(ElementName = "contents")] 
    public class Contents 
    { 
     [XmlElement(ElementName = "section")] 
     public List<Section> Section { get; set; } 
    } 

-Code ...

 Contents dezerializedXML = new Contents(); 
     // Deserialize to object 
     XmlSerializer serializer = new XmlSerializer(typeof(Contents)); 
     using (FileStream stream = File.OpenRead(@"xml.xml")) 
     { 
      dezerializedXML = (Contents)serializer.Deserialize(stream); 
     } // Put a break-point here, then mouse-over dezerializedXML 

I lege dein XML in eine Datei (xml.xml) und lese es von dort ...

+0

Oh mo, Es funktioniert wie ich es will, vielen Dank <3 –