空的序列化XML文件
本文关键字:文件 XML 序列化 | 更新日期: 2023-09-27 18:27:15
序列化对象后,我得到一个空的xml文件。我使用的是Monosdevelop和Unity 4。我搜索了这么长时间,主要是在这个社区,但我只发现了更难的问题和更难的答案:)我觉得我的问题很简单,请帮帮我。(我是c#的新手)序列化的对象是:
[System.Serializable]
public class information {
private string data1;
private string data2;
private string data3;
public void Data1(string text)
{
data1 = text;
}
public string GetData1 ()
{
return data1;
}
public void Data2(string text)
{
data2 = text;
}
public string GetData2 ()
{
return data2;
}
public void Data3(string text)
{
data3 = text;
}
}
序列化类是这样的,这里可能有问题:
public class SaveXml {
public void SaveData(object obj, string filename)
{
XmlSerializer sr = new XmlSerializer(obj.GetType());
TextWriter writer = new StreamWriter(filename);
sr.Serialize(writer, obj);
writer.Close();
}
public string Load()
{
if(File.Exists("accdata.xml"))
{
XmlSerializer xs = new XmlSerializer(typeof(information));
FileStream read = new FileStream("accdata.xml",FileMode.Open, FileAccess.Read, FileShare.Read);
information info = (information)xs.Deserialize(read);
return info.GetData1();
}
else
{
return "file does not exist";
}
}
串行化和串行化对象由具有以下两个按钮的菜单调用:
if(GUI.Button(new Rect(10,50,300,100),"Save"))
{
SaveXml saver = new SaveXml();
information infol = new information();
infol.Data1("textone");
infol.Data2("texttwo");
infol.Data3( "textthree");
saver.SaveData(infol, "accdata.xml");
}
if(GUI.Button(new Rect(500,50,300,100),"Load"))
{
SaveXml saver1 = new SaveXml();
text = saver1.Load();
}
因此,在我单击Save按钮和LoadButton之后,类菜单中声明的变量文本应该是"textone"。"保存"按钮会创建一个空文件。
反序列化似乎有效,但Information中的data1变量中当然没有String,因此菜单中名为text的变量也是空的。我没有得到任何错误,并且可以在序列化后使用该对象。那么,为什么我的序列化不起作用呢?请帮帮我。我为我糟糕的英语和错误道歉,我是斯塔科弗洛的新手。
public string Data2
{
set { data2 = value; }
get { return data2; }
}
所以你的information
类可以是
public class Information
{
public string Data1 { get; set; }
public string Data2 { get; set; }
public string Data3 { get; set; }
}
BTW:您不需要这个Serializable
属性。它仅由BinaryFormatter使用
我不确定,但据我所见,您没有任何公共字段。。。看看这里
另外,为什么不直接使用autogetter/setter呢?
根据这篇MSDN支持文章,使用XmlSerializer的方式只执行"浅"序列化-它只序列化公共字段/属性。要序列化私有数据,需要"深度"序列化,这似乎是另一种动物。