C# Windows窗体XML序列化加载对话框
我有一个保存/加载XML文件的windows窗体,它会询问用户要将其保存/加载到哪里。我的问题是,我不知道如何更改此方法以从用户想要的位置加载文件,而不是从streamreader指定的位置加载文件 下面的代码是我的按钮和LoadValues方法的代码C# Windows窗体XML序列化加载对话框,c#,xml,windows,forms,loading,C#,Xml,Windows,Forms,Loading,我有一个保存/加载XML文件的windows窗体,它会询问用户要将其保存/加载到哪里。我的问题是,我不知道如何更改此方法以从用户想要的位置加载文件,而不是从streamreader指定的位置加载文件 下面的代码是我的按钮和LoadValues方法的代码 private void Edittask_loadbuttonClick( object sender, EventArgs e) { Stream myStream = null; var sFile1 = new O
private void Edittask_loadbuttonClick(
object sender, EventArgs e)
{
Stream myStream = null;
var sFile1 = new OpenFileDialog();
sFile1.InitialDirectory = "c:\\";
sFile1.Filter = "xml files (*.xml)|*.xml";
sFile1.FilterIndex = 2;
sFile1.RestoreDirectory = true;
if (sFile1.ShowDialog() == DialogResult.OK)
{
try
{
if ((myStream = sFile1.OpenFile()) != null)
{
using (myStream)
{
var v = LoadValues();
this.load_task1_name.Text =
v.task1_name;
this.load_task1_desc.Text =
v.task1_desc;
this.load_task1_date.Value =
v.task1_date;
this.load_checkbox.Checked =
v.task1_checkbox;
}
}
}
catch (Exception ex)
{
MessageBox.Show(
"Error: Could not read file from disk. Original error: " +
ex.Message);
}
}
}
public Values LoadValues()
{
var serializer = new XmlSerializer(typeof (Values));
using (
TextReader textReader = new StreamReader(
"E:\\hello.xml")
)
{
return
(Values) serializer.Deserialize(textReader);
}
}
您需要将
流作为参数传递给函数。我会将流从OpenFileDialog传递到LoadValues(…),并使用它来构造StreamReader:
public Values LoadValues(Stream stream)
{
XmlSerializer serializer = new XmlSerializer(typeof(Values));
using (TextReader textReader = new StreamReader(stream))
{
return (Values)serializer.Deserialize(textReader);
}
}
及
很高兴我能帮忙。如果一个答案解决了你的问题,如果你将它标记为已回答,那么它会有所帮助,而且回答者会得到一些声誉分数。
if ((myStream = sFile1.OpenFile()) != null)
{
using (myStream)
{
Values v = LoadValues(myStream);
...
}
}