我尝试使用以下代码将我的对象序列化为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();
答案 0 :(得分:0)
write.Serialize可能每次都会覆盖文件中的内容而不是附加内容。您可以尝试将值序列化为类似于此问题的字符串:Serialize an object to string。然后使用字符串值手动附加到文件。
或者,您可以序列化整个列表,而不是每次都序列化每个值。
答案 1 :(得分:0)
填充列表的第一个foreach循环会反复覆盖相同的value
对象,并重复向List添加对同一对象的新引用。当您致电valus.Add(value);
时,您实际上并未在列表中添加新项目。
尝试将行values value = new values();
移动到foreach循环的顶部,或者,如果您特别担心多次声明对象的效率,请将行values value;
保留在循环外并添加foreach循环中的value = new values();
行。
答案 2 :(得分:0)
首先让我们验证您的类是否可以串行化,如下所示:
[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 );