2017-12-21 2 views
4

Ich bin newby .net und Xamarin. Ich versuche eine Xamarin-Formularanwendung zu entwickeln. Wenn ich versuche, mein XML zu deserialisieren, nehme ich Fehler.C# Xml Deserializion Fehler

Error Message is 

bei System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Xml.Serialization.TypeData Typedata, System.Xml.Serialization.XmlRootAttribute Wurzel, System.String Default) [0x0013d] in < 6ae4606e5b2b46498c0ae37681c7e745> : 0 bei System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Type Typ, System.Xml.Serialization.XmlRootAttribute Wurzel, System.String Default) [0x00048] in < 6ae4606e5b2b46498c0ae37681c7e745>: 0 bei System.Xml.Serialization. XmlSerializer..ctor (System.Type-Typ, System.Xml.Serialization.XmlAttributeOverrides-Überschreibungen, System.Type [] extraTypes, Syst em.Xml.Serialization.XmlRootAttribute Wurzel, System.String Default) [0x00041] in < 6ae4606e5b2b46498c0ae37681c7e745>: 0 bei System.Xml.Serialization.XmlSerializer..ctor (System.Type Typ) [0x00000] in < 6ae4606e5b2b46498c0ae37681c7e745>: 0 bei Fmkt44.icerik.Deserialize1 (System.String IasReturn) [0x00002] in C: \ Benutzer \ TEKINHP \ source \ repos \ FimaksApp \ Fmkt44 \ Fmkt44 \ icerik.xaml.cs: 83

[XmlRoot("REPORTLIST")] 
[Serializable] 
class REPORTLIST 
{ 
    public REPORTLIST() 
    { 

    }  

    public List<ROW> ROW { get; set; } 

} 
[Serializable] 
class ROW 
{ 
    public ROW() 
    { 

    } 
    public string INSTNUMBER { get; set; } 
    public string MATERIAL { get; set; } 

} 

Meine XML-Datei ist

<REPORTLIST> 
    <ROW> 
     <MATERIAL>A</MATERIAL> 
     <INSTNUMBER>B</INSTNUMBER> 
    </ROW> 
</REPORTLIST> 

Dies ist mein Deserialize Methoden

public static Stream GenerateStreamFromString(string s) 
    { 
     MemoryStream stream = new MemoryStream(); 
     StreamWriter writer = new StreamWriter(stream); 
     writer.Write(s); 
     writer.Flush(); 
     stream.Position = 0; 
     return stream; 
    } 
    REPORTLIST Deserialize1(String MyXml) 
    { 
     XmlSerializer serializer = new XmlSerializer(typeof(REPORTLIST)); 
     return (REPORTLIST)serializer.Deserialize(GenerateStreamFromString(MyXml)); 

    } 

Fehler bei serializer.Deserialize occurrs

+0

btw: Sie sollten 'neuen String (myXML) zu verwenden, um' statt 'GenerateStreamFromString' –

Antwort

3

Die Fehlermeldung lautet:

REPORTLIST aufgrund seiner Schutzebene nicht zugänglich ist. Nur öffentliche Typen können verarbeitet werden.

Machen Sie die Typen public. XmlSerializer kann nicht auf internal Typen arbeiten. Auch: Sie brauchen nicht die [Serializable] - XmlSerializerist egal.

Sie müssen auch [XmlElement] auf der Sammlung, um es zu sagen, nicht hinzufügen/erwarten ein Wrapper-Element.

Schlussarbeitsversion:

[XmlRoot("REPORTLIST")] 
public class ReportList 
{ 
    [XmlElement("ROW")] 
    public List<Row> Rows { get; } = new List<Row>();  
} 
public class Row 
{ 
    [XmlElement("INSTNUMBER")] 
    public string InstNumber { get; set; } 
    [XmlElement("MATERIAL")] 
    public string Material { get; set; } 
} 
+0

Danke. Ich dachte nicht so einfach –