C# 将多个对象序列化为XML
我尝试使用以下代码将对象序列化为xml文件,但运行此代码时,列表中的最后一项将被列表的计数序列化 我想序列化列表中的每个项目?我的代码有什么问题 有人能帮我吗C# 将多个对象序列化为XML,c#,xml-serialization,C#,Xml Serialization,我尝试使用以下代码将对象序列化为xml文件,但运行此代码时,列表中的最后一项将被列表的计数序列化 我想序列化列表中的每个项目?我的代码有什么问题 有人能帮我吗 //list of class values List<values> valus = new List<values>(); values value = new values(); foreach (Control control in Controls) { value
//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.ctrlname=control.Name.ToString();
value.ctrllocation=control.Location.ToString();
value.ctrltext=control.Text.ToString();
value.ctrltype=control.GetType().ToString();
value.ctrlstatus=control.Enabled.ToString();
增值(增值);
}
System.Xml.Serialization.XmlSerializer编写器=
新的System.Xml.Serialization.XmlSerializer(typeof(value));
var path=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)+“//Serialization.xml”;
System.IO.FileStream file=System.IO.file.Create(路径);
foreach(值中的值项)
{
序列化(文件、项);
}
file.Close();
write.Serialize可能每次都会覆盖文件中的内容,而不是追加内容。您可以尝试将值序列化为以下问题中的字符串:。然后手动将字符串值追加到文件
或者,您可以一次序列化整个列表,而不是每个值。write.serialize可能每次都会覆盖文件中的内容,而不是追加内容。您可以尝试将值序列化为以下问题中的字符串:。然后手动将字符串值追加到文件
或者,您可以序列化整个列表,而不是一次序列化每个值。填充列表的第一个foreach循环将重复覆盖相同的
值
对象,并向列表中重复添加对相同对象的新引用。当您调用valus.Add(value)时,实际上并没有向列表中添加新项目代码>
尝试移动行values value=new values()
到foreach循环的顶部,或者,如果您特别担心多次声明对象的效率,请保留行值代码>在循环外部,并添加行value=newvalues()在foreach循环内进行编码。填充列表的第一个foreach循环将重复覆盖相同的值
对象,并向列表中重复添加对相同对象的新引用。当您调用valus.Add(value)时,实际上并没有向列表中添加新项目代码>
尝试移动行values value=new values()
到foreach循环的顶部,或者,如果您特别担心多次声明对象的效率,请保留行值代码>在循环外部,并添加行value=newvalues()代码>在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<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 );
/。。。
List SomeListOfvalues=新列表();
//初始化列表
SomeListOfvalues.add(新值());//添加第一个元素
SomeListOfvalues.add(新值());//添加第二个元素
//将整个列表添加到我们的课堂
valuesList.valuesList.addRange(一些值列表);
首先让我们验证您的类是可序列化的,如下所示:
[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<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 );
/。。。
List SomeListOfvalues=新列表();
//初始化列表
SomeListOfvalues.add(新值());//添加第一个元素
SomeListOfvalues.add(新值());//添加第二个元素
//将整个列表添加到我们的课堂
valuesList.valuesList.addRange(一些值列表);
您重复覆盖同一文件,因此您的文件最终包含最后一项,请序列化列表,而不是一次一项。@YaelBS我在您的回答中写了一条注释您重复覆盖同一文件,因此您的文件最终包含最后一项,请序列化列表,不是每一项都一次完成。@YaelBS我在你的回答中写了一条评论什么是valuesList in valuesList.Add(value);你是说贵重物品清单吗?在将其替换为valuesList后,给我一个错误not contain Add method About valuesList如果我想添加valuesList命名的值列表?仅最后一条注释如何使用valuesList.valuesList.AddRange(其他一些ValueList)
如何使用它请注意,您在回答OP的代码时所做的一个重要更改是初始化foreach循环中的值
对象。否则,代码将创建对同一值的多个引用。我认为这一点很重要。什么是valuesList in valuesList。添加(值);你是说贵重物品清单吗?在将其替换为valuesList后,给我一个错误not contain Add method About valuesList如果我想添加valuesList命名的值列表?仅最后一条注释如何使用valuesList.valuesList.AddRange(其他一些ValueList)
如何使用它请注意,您在回答OP的代码时所做的一个重要更改是初始化foreach循环中的值
对象。否则,代码将创建对同一值的多个引用。我认为把这件事说出来很重要。