[英]Serialize multiple objects into XML
我尝试使用以下代码将我的对象序列化为xml文件,但是运行此代码时,列表values
的最后一项将按列表计数进行序列化。
我要序列化列表中的每个项目? 我的代码有什么问题
谁能帮我 ?
//list of class values
List<values> valus = new List<values>();
values value = new values();
foreach (Control control in Controls)
{
value.ctrlname = control.Name.ToString();
value.ctrllocation = control.Location.ToString();
value.ctrltext = control.Text.ToString();
value.ctrltype = control.GetType().ToString();
value.ctrlstatus = control.Enabled.ToString();
valus.Add(value);
}
System.Xml.Serialization.XmlSerializer writer =
new System.Xml.Serialization.XmlSerializer(typeof(values));
var path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "//Serialization.xml";
System.IO.FileStream file = System.IO.File.Create(path);
foreach (values item in valus)
{
writer.Serialize(file, item);
}
file.Close();
填充列表的第一个foreach循环将反复覆盖同一value
对象,并将对同一对象的新引用重复添加到列表中。 当您调用valus.Add(value);
时,您实际上并没有在列表中添加新项目valus.Add(value);
。
尝试移动行values value = new values();
到foreach循环的顶部,或者,如果您特别担心多次声明一个对象的效率,请保留行values value;
在循环外部并添加行value = new values();
在foreach循环中。
首先让我们验证您的类是否可序列化,如下所示:
[Serializable()]
public class rootValues
{
public rootValues()
{
valuesArray = new List<values>();
}
[XmlElement("item", typeof(values))]
public List<values> valuesList { get; set; }
}
[Serializable()]
public class values
{
[System.Xml.Serialization.XmlAttribute("ctrlname")]
public string ctrlname { get; set; }
//....
}
其次,您对列表和对象使用相同的名称
//list of class values
rootValues valusList = new rootValues();
foreach (Control control in Controls)
{
values value = new values(); // Create new element, in your code it was the same
value.ctrlname = control.Name.ToString();
value.ctrllocation = control.Location.ToString();
value.ctrltext = control.Text.ToString();
value.ctrltype = control.GetType().ToString();
value.ctrlstatus = control.Enabled.ToString();
valuesList.valuesList.Add(value);
}
System.Xml.Serialization.XmlSerializer writer = new System.Xml.Serialization.XmlSerializer(typeof(rootValues));
var path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "//Serialization.xml";
System.IO.FileStream file = System.IO.File.Create(path);
writer.Serialize(file, valusList);
file.Close();
仅供参考,如果您要添加class values
列表,可以这样做:
//...
List<values> SomeListOfvalues = new List<values>();
// Init list
SomeListOfvalues.add(new values()); // Adding first element
SomeListOfvalues.add(new values()); // Adding second element
// Adding the whole list to our class
valuesList.valuesList.addRange(SomeListOfvalues );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.