【问题标题】:Serializing FileSystemWatcher Object序列化 FileSystemWatcher 对象
【发布时间】:2013-08-05 09:06:11
【问题描述】:

我想将 FileSystemWatcher 对象存储在 sqlite 数据库中以供将来参考,但是在序列化对象时出现以下异常

“在程序集 'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 中键入 'System.IO.FileSystemWatcher' 未标记为可序列化。”

这里是代码

            MemoryStream memorystream = new MemoryStream();
            BinaryFormatter bf = new BinaryFormatter();
            bf.Serialize(memorystream, FSWatcher);
            byte[] yourBytesToDb = memorystream.ToArray();

感谢和问候, 哈西娜

【问题讨论】:

  • 这意味着你不能序列化FileSystemWatcher,句号。话虽如此,我在这里真的没有看到问题......?
  • 所以.. 错误告诉您确切的问题是什么。为什么不将其属性存储在 db 列中?为什么必须序列化整个对象?
  • 那是因为FSWatcher 不可序列化。你有什么问题?
  • 您想保留什么样的信息,为什么?
  • 我正在开发一个备份工具,并使用文件系统监视器来处理新添加和更改的文件事件。如果有人删除要备份的文件夹或扩展名,我想保留对象以停止文件监视器事件向上。那么保存对象的正确方法是什么?

标签: c# serialization filesystemwatcher


【解决方案1】:

使用 XML 格式

public static void SaveAsXML(Object A, string FileName)
{
    var serializer = new XmlSerializer(A.GetType());
    using (var textWriter = new StreamWriter(FileName))
    {
        serializer.Serialize(textWriter, A);
        textWriter.Close();
    }
}

public static T LoadFromXML<T>(string FileName) where T : class
{
    if (File.Exists(FileName))
    {
        using (var textReader = new StreamReader(FileName))
        {
            var deserializer = new XmlSerializer(typeof(T));
            return (T)(deserializer.Deserialize(textReader));
        }
    }
    return default(T);
}

【讨论】:

  • 你试过了吗?这也不应该工作,因为它没有被标记为可序列化!
  • SerializableAttribute 对二进制序列化很重要! XML 序列化的工作方式完全不同
  • 使用 SaveAsXML 方法获取以下异常 反映类型“System.IO.FileSystemWatcher”时出现错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多