首頁 >後端開發 >C++ >如何使用二進位、XML 和 JSON 序列化在 .NET 中保留和恢復可序列化物件?

如何使用二進位、XML 和 JSON 序列化在 .NET 中保留和恢復可序列化物件?

Barbara Streisand
Barbara Streisand原創
2025-01-23 11:47:12324瀏覽

How to Persist and Restore Serializable Objects in .NET Using Binary, XML, and JSON Serialization?

.NET中使用二進位、XML和JSON序列化持久化和恢復可序列化物件

.NET中的物件序列化允許將物件儲存在持久性儲存中,並在以後以其原始形式檢索。要序列化對象,其類別必須標記為[Serializable]。在使用二進位序列化時,此註解至關重要,但在XML或JSON序列化中則不需要。

以下是二進位、XML和JSON序列化的函數範例:

二元序列化:

<code class="language-csharp">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);
    }
}</code>

XML序列化:

<code class="language-csharp">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();
    }
}</code>

JSON序列化(需Newtonsoft.Json NuGet套件):

<code class="language-csharp">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();
    }
}</code>

使用方法範例:

<code class="language-csharp">// 将someClass变量的内容写入文件。
WriteToBinaryFile<SomeClass>("C:\someClass.txt", object1);

// 将文件内容读回变量。
SomeClass object1 = ReadFromBinaryFile<SomeClass>("C:\someClass.txt");</code>

以上是如何使用二進位、XML 和 JSON 序列化在 .NET 中保留和恢復可序列化物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn