序列化,在做完某工具的Redo-Undo之后,对序列化耿耿于怀,如果实现了序列化,就没有那么多Command了。 不过,C++的序列化有待研究。C#倒是天生地支持反射与序列化,写一个简单的sample测试之。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
using System.IO;
namespace Serialize
{
public struct Vector3
{
public float x;
public float y;
public float z;
}
public class TestClass
{
public int testInt = 2345;
public float testFloat = 8394.38492f;
public string testString = "无价最耗";
public bool[] boolArray = { false, true, true, false };
public Vector3 testVector3;
public TestClass()
{
this.testVector3.x = 89.0f;
this.testVector3.y = 78;
this.testVector3.z = 4589;
}
}
public class Program
{
public static string SerializeToString(object obj)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, obj);
return writer.ToString();
}
}
public static T SerializeFromString<T>(string xml)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
using (StringReader reader = new StringReader(xml))
{
return (T)serializer.Deserialize(reader);
}
}
static void Main(string[] args)
{
TestClass test = new TestClass();
string xml = SerializeToString(test);
TestClass result = SerializeFromString<TestClass>(xml);
string savepath = "E:\\serializedContent.xml";
using (StreamWriter sw = new StreamWriter(savepath))
{
sw.Write(xml);
}
using (StreamReader sr = new StreamReader(savepath))
{
string txt = sr.ReadToEnd();
Console.Write(txt);
}
}
}
}
如何将C#的序列化与C++结合,或者C++里实现序列化,是后续的重点。
前者可以参考http://blog.csdn.net/xoyojank/article/details/7015001