1.刚才我想将游戏信息保存下来,本来想保存在xml文件里,利用创建xml文件,添加节点的方式保存,刚做了一点,有个兄弟说可以使用序列化的方式将类直接保存为xml文件,然后就去实验如何操,发现了Using语句的一个问题:
2.先不管save和reder:这样调用以后,虽然序列化了,也可以读取,但是打开Xml文件发现里面没有数据,能读取,没有数据,说明数据还在内存中,对象没有释放,并没有刷新进入硬盘,而using语句绑定的对象是在语块执行完毕后自动释放的,说明using语句在主函数中绑定对象失效了,也就是说using语句绑定对象的用法,必须在一个单独的方法中,而不能再Main方法,如果要在Main方法使用必须在using语句块中显式的调用对象的Dispose()方法或者close()方法,经过测试,这是成功的。
3.另外一种就是比如save(),reder(),这样的写法,调用后自动释放,无需显式调用close和dispose。
4.查询官方文档要求将Using用法放在单独的方法中。
可以被序列化化保存的类:(注意类上面的特性[System.Serializable]可序列化标志)
using System;
using System.IO;
using System.Xml.Serialization;
namespace Cshape操作XML文件
{
[System.Serializable]
public class GameInfo
{
public string str = "我爱你!";
public GameInfo() { }
public void save()
{
using (var stream = File.Open("1113.xml", FileMode.Create))
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(GameInfo));
xmlSerializer.Serialize(stream, this);
}
}
public void Reder()
{
using (var strea = File.OpenRead("1113.xml"))
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(GameInfo));
var b = xmlSerializer.Deserialize(strea) as GameInfo;
Console.WriteLine(b.str);
}
}
}
}
这是主类:
using System;
using System.IO;
using System.Xml.Serialization;
namespace Cshape操作XML文件
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Console.WriteLine(new XMSerialization().GetType().ToString() + "1");
Console.WriteLine(typeof(XMSerialization).ToString() + "2");
var a = new GameInfo();
using (var stream = File.Open("1115.xml", FileMode.Create))
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(GameInfo));
xmlSerializer.Serialize(stream, a);
}
using (var strea = File.OpenRead("1115.xml"))
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(GameInfo));
var b = xmlSerializer.Deserialize(strea) as GameInfo;
Console.WriteLine(b.str);
}
Console.ReadKey();
}
}
}