c# - 反序列化返回空对象,使用Filestream和Binaryformatter

标签 c# filestream binaryformatter

问题是反序列化时我在存储库中得到零计数(没有任何错误)

[Serializable]
class RegexRepository : Dictionary<string, string>
{
    public RegexRepository()
    {
        //this.Add("All", "ALL");
        //this.Add("Name", @"Name:(?<data>[\s\w]+)Email");
        //this.Add("Email", @"Email:(?<data>[\w\s@]+\.com)");
        //this.Add("Phone Number", "Phone:(?<data>\\d+)");
    }
    protected RegexRepository(SerializationInfo info, StreamingContext context)
    {

    }
    private static RegexRepository repo = new RegexRepository();
    public static RegexRepository Instance
    {
        get
        {
            if (repo == null)
            {
                repo = new RegexRepository();
            }
            return repo;
        }
    }
    string FileName = AppDomain.CurrentDomain.BaseDirectory + "BinaryFile.dat";
    public void Serialize()
    {
        using (FileStream ms = new FileStream(FileName, FileMode.OpenOrCreate))
        {
            var bf = new BinaryFormatter();
            bf.Serialize(ms, this);
        }
    }
    public void Deserialize()
    {
        if (System.IO.File.Exists(FileName))
        {
            using (FileStream ms = new FileStream(FileName, FileMode.Open))
            {
                var bf = new BinaryFormatter();
                repo = (RegexRepository)bf.Deserialize(ms);
               //Here i get zero count in repo, checked while debugging
            }
        }
    }
}

我已经看到BinaryFile.dat不为空,我可以在其中看到一些记录。请帮助我

最佳答案

您需要从流式构造函数中调用基本构造函数:

    protected RegexRepository(SerializationInfo info, StreamingContext context)
        : base(info, context)
    {
    }

此外,FileName 可能不应该是一个字段,您在类中为其分配内存,这是没有必要的。相反,静态属性似乎更有意义:

    static string FileName
    {
        get
        {
            return AppDomain.CurrentDomain.BaseDirectory + "BinaryFile.dat";
        }
    }

关于c# - 反序列化返回空对象,使用Filestream和Binaryformatter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33623701/

相关文章:

c# - 为什么编译器要在开关中添加语句?

c# - .NET Core Identity as UI 取消注册

c# - 由于 FileStream.Create UnauthorizedAccessException 正在寻找解决方法

c# - 二进制流 '0' 不包含反序列化时的有效 BinaryHeader 错误

.net - 我可以使用 protobuf-net 在 Mono 中序列化一个对象(包含成员 : Dictionary, 列表...等)并在 MS.NET 中反序列化它,反之亦然?

c# - 用于分割字符串的高级正则表达式

c# - Moq - 如何在循环中调用具有不同参数的相同设置

c# - FileStream 和 System.IO.File 方法之间的文件访问差异

c# - 我应该重用 FileStream/BinaryWriter 对象吗?

c# - 使用 BinaryFormatter 序列化的对象导致对象版本更改的原因是什么?