[英]Deserialize a xml into multiple objects list
我在UWP項目中反序列化時遇到問題,已經成功從兩個對象列表中創建了帶有XElements的xml文檔,我需要反序列化值並填充兩個對象列表。
我的課程:
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); }
}
}
我的代碼:
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());
xml是:
<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>
要將對象實例序列化為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();
}
會給你
<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>
要讀回對象,可以使用x.Deserialize...
例如,要更改xml結構,請使用序列化屬性。
[XmlRoot("MyValues")]
public class Values_Body
{
private bool _ToAcero;
[XmlElement("TOACEROITEM")]
public bool ToAcero
{
...
會將寫入/讀取的xml更改為:
<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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.