Maison >développement back-end >C++ >Comment conserver et restaurer des objets sérialisables dans .NET à l'aide de la sérialisation binaire, XML et JSON ?

Comment conserver et restaurer des objets sérialisables dans .NET à l'aide de la sérialisation binaire, XML et JSON ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-23 11:47:12288parcourir

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

Persistance et restauration d'objets sérialisables à l'aide de la sérialisation binaire, XML et JSON dans .NET

La sérialisation des objets dans .NET permet aux objets d'être stockés dans un stockage persistant et de les récupérer ultérieurement sous leur forme d'origine. Pour sérialiser un objet, sa classe doit être marquée [Serializable]. Cette annotation est cruciale lors de l'utilisation de la sérialisation binaire, mais n'est pas requise avec la sérialisation XML ou JSON.

Voici des exemples de fonctions pour la sérialisation binaire, XML et JSON :

Sérialisation binaire :

<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>

Sérialisation 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>

Sérialisation JSON (nécessite le package 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>

Exemple d'utilisation :

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn