C# 将对象列表保存到Txt文件
好的,所以我认为我可以很容易地做到这一点,但现在很明显我错过了一些重要的东西 我有一个名为Oggetto的类,Oggetto有一个公共字符串Nome{get;set;}和一个公共字符串descripione{get;set;} 它们绑定到DataGrid单元格中的文本框,如下所示C# 将对象列表保存到Txt文件,c#,wpf,list,data-binding,C#,Wpf,List,Data Binding,好的,所以我认为我可以很容易地做到这一点,但现在很明显我错过了一些重要的东西 我有一个名为Oggetto的类,Oggetto有一个公共字符串Nome{get;set;}和一个公共字符串descripione{get;set;} 它们绑定到DataGrid单元格中的文本框,如下所示 <DataGridTemplateColumn Header="Nome" MinWidth="60"> <DataGridTe
<DataGridTemplateColumn Header="Nome" MinWidth="60">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="{x:Type local:Oggetto}">
<TextBox Text="{Binding Nome}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Descrizione" MinWidth="100">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="{x:Type local:Oggetto}">
<TextBox Text="{Binding Descrizione}" TextWrapping="Wrap" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
我还有一个保存方法,点击另一个按钮就可以保存
public void Salvataggio()
{
StreamWriter sw = new StreamWriter("MiscSave");
foreach(Oggetto oggetto in oggetti)
{
sw.WriteLine(oggetti);
}
sw.Close();
}
我的问题是MiscSave.txt文件完全是空白的。
我在这里和那里尝试了几种解决方案,但我似乎无法让它们对我起作用
例如,我甚至不知道将oggetto.descripione绑定到TextBlock是否会在内部写入内容发生变化时使其发生变化。
我想到了类似的事情
oggetto.Nome = oggetti[0].Text
但即使在我的脑海里,这也没有多大意义
我也不会说英语作为我的主要语言,因此,对于我犯的任何错误,请提前表示歉意,请随意指出,但大多数情况下,请随意指出我在理解将列表保存到txt文件时存在的漏洞。在您的保存方法中:
sw.WriteLine(oggetti)代码>
您正试图将类型为Oggetto
的整个自定义对象列表保存到文本文件中的一行
这是行不通的,因为WriteLine
方法需要一个字符串作为参数
比如:
sw.WriteLine(oggetto.Nome)代码>
只要Nome
的类型为string
,就可能有效
这样,您就可以访问Oggetto
对象列表中每个项的字符串属性。一次不能保存整个集合(列表)。在保存方法中:
sw.WriteLine(oggetti)代码>
您正试图将类型为Oggetto
的整个自定义对象列表保存到文本文件中的一行
这是行不通的,因为WriteLine
方法需要一个字符串作为参数
比如:
sw.WriteLine(oggetto.Nome)代码>
只要Nome
的类型为string
,就可能有效
这样,您就可以访问Oggetto
对象列表中每个项的字符串属性。一次不能包含整个集合(列表)。您也可以尝试使用序列化类型。以下代码应将对象序列化为文件
FileStream writer = new FileStream(fileName, FileMode.Create);
DataContractSerializer ser = new DataContractSerializer(typeof(List<Oggetto>));
ser.WriteObject(writer, oggetti);
writer.Close();
filestreamwriter=newfilestream(文件名,FileMode.Create);
DataContractSerializer ser=新的DataContractSerializer(typeof(List));
ser.WriteObject(作者,oggetti);
writer.Close();
您还可以尝试使用序列化类型。以下代码应将对象序列化为文件
FileStream writer = new FileStream(fileName, FileMode.Create);
DataContractSerializer ser = new DataContractSerializer(typeof(List<Oggetto>));
ser.WriteObject(writer, oggetti);
writer.Close();
filestreamwriter=newfilestream(文件名,FileMode.Create);
DataContractSerializer ser=新的DataContractSerializer(typeof(List));
ser.WriteObject(作者,oggetti);
writer.Close();
同样,我建议通过xml或序列化之类的方式来实现这一点。当您想读回文件时,这会有所帮助。
但是,请尝试以下方法:File.writeAllines
以下是MSDN链接和示例。
您需要为该方法提供一个要保存到的文件路径和一组要保存的字符串。您可能需要从Ogetta或其他方法创建另一个集合,或者对该集合执行for循环并插入字符串属性等,然后才能将其传递给File.writealText方法。同样,我建议您通过xml或序列化或其他方法来执行此操作。当您想读回文件时,这会有所帮助。
但是,请尝试以下方法:File.writeAllines
以下是MSDN链接和示例。
您需要为该方法提供一个要保存到的文件路径和一组要保存的字符串。在将其传递到File.writealText方法之前,您可能需要从Ogetta或其他方法创建另一个集合,或者对该集合执行for循环并插入字符串属性等操作。我同意此观点,即如果可以,请使用序列化。否则就这样做:
File.WriteAllLines("MiscSave", oggetti.Select(o =>
o.Nome + " " + o.Descrizione
));
我同意西奥的观点,也就是说,如果可以的话,可以使用序列化。否则就这样做:
File.WriteAllLines("MiscSave", oggetti.Select(o =>
o.Nome + " " + o.Descrizione
));
我试着改变sw.WriteLine(oggetti);行到sw.WriteLine(oggetto.Nome+';'+oggetto.descripione);但是没有什么改变谢谢大家的帮助,不喜欢我切换到数据库的txt选项;行到sw.WriteLine(oggetto.Nome+';'+oggetto.descripione);但是什么都没有改变谢谢大家的帮助,不喜欢我切换到数据库的txt选项。