2016-07-01 9 views
0

Ich habe Probleme mit meiner Deserialisierung in meinem UWP-Projekt, ich wurde ein XML-Dokument mit XElements aus meinen zwei Objekte Listen erfolgreich erstellt und ich muss die Werte deserialisieren und füllen Sie beide Listen von Objekten.Deserialize eine XML in mehrere Objekte Liste

Meine Klassen:

public class Values_Body: BindableBase 
{ 
    private bool _ToAcero; 
    public bool ToAcero 
    { 
     get { return _ToAcero; } 
     set { SetProperty(ref _ToAcero, value); } 
    } 
    private double? _Parcial; 
    public double? Parcial 
    { 
     get { return _Parcial; } 
     set { SetProperty(ref _Parcial, value); } 
    } 
    private double? _Total; 
    public double? Total 
    { 
     get { return _Total; } 
     set { SetProperty(ref _Total, value); } 
    }   
} 

Mein Code:

   Values_Head list1 = new Values_Head(); 
       list1.Add(new Head() 
       { 
        A = "text1", 
        B = "text2", 
        C = "text3", 
       }); 
       list1.Add(new Head() 
       { 
        A = "text4", 
        B = "text5", 
        C = "text6", 
       }); 
       list1.Add(new Head() 
       { 
        A = "text7", 
        B = "text8", 
        C = "text9", 
       }); 
       Values_Body list2 = new Values_Body(); 
       list2.Add(new Body() 
       { 
        Parcial = 1, 
        Total=1, 
        ToAcero = false, 

       }); 
       list2.Add(new Body() 
       { 
        Parcial = 10, 
        Total = 10, 
        ToAcero = false, 

       }); 

       var xml = new XElement("XmlSerialize", new[] 
       { 
        new XElement("list1", list1.Select(t => new XElement("name", t.A))), 
        new XElement("list1", list1.Select(t => new XElement("long", t.B))), 
        new XElement("list1", list1.Select(t => new XElement("fixable", t.C))), 

        new XElement("list2", list2.Select(t => new XElement("name", t.Parcial))), 
        new XElement("list2", list2.Select(t => new XElement("name", t.Total))), 
        new XElement("list2", list2.Select(t => new XElement("name", t.ToAcero))), 
       }); 
       File.WriteAllText("NewSave.xml", xml.ToString()); 

Die XML ist:

<XmlSerialize> 
    <list1> 
    <name>text1</name> 
    <name>text4</name> 
    <name>text7</name> 
    </list1> 
    <list1> 
    <long>text2</long> 
    <long>text5</long> 
    <long>text8</long> 
    </list1> 
    <list1> 
    <fixable>text3</fixable> 
    <fixable>text6</fixable> 
    <fixable>text9</fixable> 
    </list1> 
    <list2> 
    <parcial>1</parcial> 
    <parcial>10</parcial> 
    </list2> 
    <list2> 
    <total>1</total> 
    <total>10</total> 
    </list2> 
    <list2> 
    <acero>false</acero> 
    <acero>false</acero> 
    </list2> 
</XmlSerialize> 

Antwort

0

Ihre Objektinstanz serialisiert werden Sie tun würden folgendes xml:

var x = new XmlSerializer(typeof(Values_Body)); 
var document = new XDocument(); 
{ 
    using (var writer = document.CreateWriter()) 
    { 
     x.Serialize(writer, new Values_Body 
     { 
      ToAcero = true, 
      Parcial = 1000, 
      Total = 2000 
     }); 
    } 
    // example method, which displays the document in Linqpad 
    // https://www.linqpad.net 
    document.Dump(); 
} 

werden Sie

<Values_Body xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <ToAcero>true</ToAcero> 
    <Parcial>1000</Parcial> 
    <Total>2000</Total> 
</Values_Body> 

geben Sie das Objekt wieder lesen würden Sie x.Deserialize...

verwenden, um die XML-Struktur, die Sie Attribute verwenden Serialisierung zu ändern, zum Beispiel.

[XmlRoot("MyValues")] 
public class Values_Body 
{  
    private bool _ToAcero; 
    [XmlElement("TOACEROITEM")] 
    public bool ToAcero 
    { 
     ... 

die xml ändern geschrieben/gelesen:

<MyValues xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <TOACEROITEM>true</TOACEROITEM> 
    <Parcial>1000</Parcial> 
    <Total>2000</Total> 
</MyValues>