C# 序列化
二进制
public static void BinarySaveTo<T>(T data, string pathName)
{
FileStream fileStream = new FileStream(pathName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(fileStream, data);
fileStream.Close();
}
public static T BinaryReadOf<T>(string pathName)
{
FileStream fileStream = new FileStream(pathName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
BinaryFormatter binaryFormatter = new BinaryFormatter();
T data = (T) binaryFormatter.Deserialize(fileStream);
fileStream.Close();
return data;
}
public static byte[] BinarySerialize<T>(T data)
{
MemoryStream memoryStream = new MemoryStream();
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(memoryStream, data);
byte[] serializeData = memoryStream.ToArray();
memoryStream.Close();
return serializeData;
}
public static T BinaryDeserialize<T>(byte[] serializeData)
{
MemoryStream memoryStream = new MemoryStream(serializeData);
BinaryFormatter binaryFormatter = new BinaryFormatter();
T data = (T) binaryFormatter.Deserialize(memoryStream);
memoryStream.Close();
return data;
}
Xml
public static void XmlSaveTo<T>(T data, string pathName)
{
FileStream fileStream = new FileStream(pathName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
xmlSerializer.Serialize(fileStream, data);
fileStream.Close();
}
public static T XmlReadOf<T>(string pathName)
{
FileStream fileStream = new FileStream(pathName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
T data = (T)xmlSerializer.Deserialize(fileStream);
fileStream.Close();
return data;
}
public static byte[] XmlSerialize<T>(T data)
{
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
xmlSerializer.Serialize(memoryStream, data);
byte[] serializeData = memoryStream.ToArray();
memoryStream.Close();
return serializeData;
}
public static T XmlDeserialize<T>(byte[] serializeData)
{
MemoryStream memoryStream = new MemoryStream(serializeData);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
T data = (T)xmlSerializer.Deserialize(memoryStream);
memoryStream.Close();
return data;
}
Json
public static void JsonSaveTo<T>(T data, string pathName)
{
FileStream fileStream = new FileStream(pathName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
dataContractJsonSerializer.WriteObject(fileStream, data);
fileStream.Close();
}
public static T JsonReadOf<T>(string pathName)
{
FileStream fileStream = new FileStream(pathName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
T data = (T)dataContractJsonSerializer.ReadObject(fileStream);
fileStream.Close();
return data;
}
public static byte[] JsonSerialize<T>(T data)
{
MemoryStream memoryStream = new MemoryStream();
DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
dataContractJsonSerializer.WriteObject(memoryStream, data);
byte[] serializeData = memoryStream.ToArray();
memoryStream.Close();
return serializeData;
}
public static T JsonDeserialize<T>(byte[] serializeData)
{
MemoryStream memoryStream = new MemoryStream(serializeData);
DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
T data = (T)dataContractJsonSerializer.ReadObject(memoryStream);
memoryStream.Close();
return data;
}
测试案例
public static class ESerializer
{
public static void BinarySaveTo<T>(T data, string pathName)
{
FileStream fileStream =
new FileStream(pathName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(fileStream, data);
fileStream.Close();
}
public static T BinaryReadOf<T>(string pathName)
{
FileStream fileStream = new FileStream(pathName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
BinaryFormatter binaryFormatter = new BinaryFormatter();
T data = (T) binaryFormatter.Deserialize(fileStream);
fileStream.Close();
return data;
}
public static byte[] BinarySerialize<T>(T data)
{
MemoryStream memoryStream = new MemoryStream();
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(memoryStream, data);
byte[] serializeData = memoryStream.ToArray();
memoryStream.Close();
return serializeData;
}
public static T BinaryDeserialize<T>(byte[] serializeData)
{
MemoryStream memoryStream = new MemoryStream(serializeData);
BinaryFormatter binaryFormatter = new BinaryFormatter();
T data = (T) binaryFormatter.Deserialize(memoryStream);
memoryStream.Close();
return data;
}
public static void XmlSaveTo<T>(T data, string pathName)
{
FileStream fileStream =
new FileStream(pathName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
xmlSerializer.Serialize(fileStream, data);
fileStream.Close();
}
public static T XmlReadOf<T>(string pathName)
{
FileStream fileStream = new FileStream(pathName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
T data = (T) xmlSerializer.Deserialize(fileStream);
fileStream.Close();
return data;
}
public static byte[] XmlSerialize<T>(T data)
{
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
xmlSerializer.Serialize(memoryStream, data);
byte[] serializeData = memoryStream.ToArray();
memoryStream.Close();
return serializeData;
}
public static T XmlDeserialize<T>(byte[] serializeData)
{
MemoryStream memoryStream = new MemoryStream(serializeData);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
T data = (T) xmlSerializer.Deserialize(memoryStream);
memoryStream.Close();
return data;
}
public static void JsonSaveTo<T>(T data, string pathName)
{
FileStream fileStream =
new FileStream(pathName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
dataContractJsonSerializer.WriteObject(fileStream, data);
fileStream.Close();
}
public static T JsonReadOf<T>(string pathName)
{
FileStream fileStream = new FileStream(pathName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
T data = (T) dataContractJsonSerializer.ReadObject(fileStream);
fileStream.Close();
return data;
}
public static byte[] JsonSerialize<T>(T data)
{
MemoryStream memoryStream = new MemoryStream();
DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
dataContractJsonSerializer.WriteObject(memoryStream, data);
byte[] serializeData = memoryStream.ToArray();
memoryStream.Close();
return serializeData;
}
public static T JsonDeserialize<T>(byte[] serializeData)
{
MemoryStream memoryStream = new MemoryStream(serializeData);
DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
T data = (T) dataContractJsonSerializer.ReadObject(memoryStream);
memoryStream.Close();
return data;
}
}
[Serializable]
public class Test
{
public Test()
{
A = 1;
B = 1;
C = 1;
}
public float A;
public float B { get; set; }
private float _c;
public float C { get; set; }
public override string ToString()
{
return string.Format("{0}, {1}, {2}", A, B, C);
}
}
public class NewBehaviourScript : MonoBehaviour
{
void Start()
{
Test test = new Test();
string pathName = "binary.byte";
ESerializer.BinarySaveTo(test, pathName);
test = ESerializer.BinaryReadOf<Test>(pathName);
Debug.Log(test);
File.Delete(pathName);
pathName = "Xml.xml";
ESerializer.XmlSaveTo(test, pathName);
test = ESerializer.XmlReadOf<Test>(pathName);
Debug.Log(test);
File.Delete(pathName);
pathName = "Json.json";
ESerializer.JsonSaveTo(test, pathName);
test = ESerializer.JsonReadOf<Test>(pathName);
Debug.Log(test);
File.Delete(pathName);
byte[] binarySerializeData = ESerializer.BinarySerialize(test);
test = ESerializer.BinaryDeserialize<Test>(binarySerializeData);
Debug.Log(test);
byte[] xmlSerializeData = ESerializer.XmlSerialize(test);
test = ESerializer.XmlDeserialize<Test>(xmlSerializeData);
Debug.Log(test);
byte[] jsonSerializeData = ESerializer.JsonSerialize(test);
test = ESerializer.JsonDeserialize<Test>(jsonSerializeData);
Debug.Log(test);
}
}