ฉันเพิ่งเขียนบล็อกโพสต์เกี่ยวกับการบันทึกข้อมูลของวัตถุเป็น Binary, XML หรือ JsonJSON คุณถูกต้องที่คุณต้องตกแต่งชั้นเรียนของคุณด้วยแอตทริบิวต์ [Serializable] แต่ถ้าคุณใช้การทำให้เป็นอนุกรมไบนารีเท่านั้น คุณอาจต้องการใช้ XML หรือ Json serialization นี่คือฟังก์ชั่นที่ต้องทำในรูปแบบต่างๆ ดูโพสต์บล็อกของฉันสำหรับรายละเอียดเพิ่มเติม
ไบนารี่
public static void WriteToBinaryFile<T>(string filePath, T objectToWrite, bool append = false)
{
using (Stream stream = File.Open(filePath, append ? FileMode.Append : FileMode.Create))
{
var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
binaryFormatter.Serialize(stream, objectToWrite);
}
}
public static T ReadFromBinaryFile<T>(string filePath)
{
using (Stream stream = File.Open(filePath, FileMode.Open))
{
var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
return (T)binaryFormatter.Deserialize(stream);
}
}
XML
ต้องการให้แอสเซมบลี System.Xml รวมอยู่ในโปรเจ็กต์ของคุณ
public static void WriteToXmlFile<T>(string filePath, T objectToWrite, bool append = false) where T : new()
{
TextWriter writer = null;
try
{
var serializer = new XmlSerializer(typeof(T));
writer = new StreamWriter(filePath, append);
serializer.Serialize(writer, objectToWrite);
}
finally
{
if (writer != null)
writer.Close();
}
}
public static T ReadFromXmlFile<T>(string filePath) where T : new()
{
TextReader reader = null;
try
{
var serializer = new XmlSerializer(typeof(T));
reader = new StreamReader(filePath);
return (T)serializer.Deserialize(reader);
}
finally
{
if (reader != null)
reader.Close();
}
}
Json
คุณจะต้องมีการอ้างอิงถึง Newtonsoft.Json ชุมนุมซึ่งสามารถได้รับจากNuGet แพคเกจ
public static void WriteToJsonFile<T>(string filePath, T objectToWrite, bool append = false) where T : new()
{
TextWriter writer = null;
try
{
var contentsToWriteToFile = JsonConvert.SerializeObject(objectToWrite);
writer = new StreamWriter(filePath, append);
writer.Write(contentsToWriteToFile);
}
finally
{
if (writer != null)
writer.Close();
}
}
public static T ReadFromJsonFile<T>(string filePath) where T : new()
{
TextReader reader = null;
try
{
reader = new StreamReader(filePath);
var fileContents = reader.ReadToEnd();
return JsonConvert.DeserializeObject<T>(fileContents);
}
finally
{
if (reader != null)
reader.Close();
}
}
ตัวอย่าง
WriteToBinaryFile<SomeClass>("C:\someClass.txt", object1);
SomeClass object1= ReadFromBinaryFile<SomeClass>("C:\someClass.txt");