c# - 将 C# 对象保存到文件

标签 c# class object serialization save

<分区>

我要在不使用数据库的情况下实现一个新的成员(member)应用程序。我打算创建一个类来定义每个成员,其中字段定义名称、部门等。我希望将这些成员的列表保存到一个文件中(不是纯文本)。所以我的问题是如何将类对象保存到文件中?

提前致谢:)

最佳答案

我建议进行 JSON 或 XML 序列化,然后使用某种算法对内容进行加密。我不会使用二进制序列化,因为当您需要更改程序集版本时它不是很友好。

我将以下代码与 Newtonsoft.Json(您可以在 NuGet 上获取)一起使用来完成此操作:

using System.IO;
using System.Security.Cryptography;
using System.Text;

using Newtonsoft.Json;

class SecureJsonSerializer<T>
    where T : class
{
    private readonly string filePath;

    private readonly ICryptoTransform encryptor;

    private readonly ICryptoTransform decryptor;

    private const string Password = "some password";

    private static readonly byte[] passwordBytes = Encoding.ASCII.GetBytes(Password);

    public SecureJsonSerializer(string filePath)
    {
        this.filePath = filePath;
        var rmCrypto = GetAlgorithm();
        this.encryptor = rmCrypto.CreateEncryptor();
        this.decryptor = rmCrypto.CreateDecryptor();
    }

    private static RijndaelManaged GetAlgorithm()
    {
        var algorithm = new RijndaelManaged();
        int bytesForKey = algorithm.KeySize / 8;
        int bytesForIV = algorithm.BlockSize / 8;
        algorithm.Key = key.GetBytes(bytesForKey);
        algorithm.IV = key.GetBytes(bytesForIV);
        return algorithm;
    }

    public void Save(T obj)
    {
        using (var writer = new StreamWriter(new CryptoStream(File.Create(this.filePath), this.encryptor, CryptoStreamMode.Write)))
        {
            writer.Write(JsonConvert.SerializeObject(obj));
        }
    }

    public T Load()
    {
        using (var reader = new StreamReader(new CryptoStream(File.OpenRead(this.filePath), this.decryptor, CryptoStreamMode.Read)))
        {
            return JsonConvert.DeserializeObject<T>(reader.ReadToEnd());
        }
    }
}

关于c# - 将 C# 对象保存到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15056469/

相关文章:

c# - 在 C# 中的给定变量之间的表中查找最小值和最大值

c++ - 仅使用 DLL *.h 头文件构建(编译链接)应用程序代码并在运行时加载 DLL 实现(显式链接)

c++ - 重载运算符保持变量更新而不是保持原始变量

c++ - A * A 类如何;由 C++ 解析的声明?

Java:如何使写入文件的对象对人类不可读?

ProcessBuilder 调用的 Java 进程永远 hibernate

C#/WPF : Creating and running an event on a separate thread at startup

c# - itunes 正在听

c# - 在 ASP.NET 中获取 HTTP Referrer

java - 当我尝试将实例变量打印为引用变量时,为什么会出现异常?