c# - 反序列化时传入对象引用

标签 c# serialization

我有一个反序列化的对象:

public object DeSerializeObject(string filename)
        {
            object objectToSerialize;
            Stream stream = File.Open(filename, FileMode.Open);
            BinaryFormatter bFormatter = new BinaryFormatter();
            objectToSerialize = (object)bFormatter.Deserialize(stream);
            stream.Close();
            return objectToSerialize;
        }

    public GUI_Settings(SerializationInfo info, StreamingContext ctxt)
    {
        PrinterFont = (Font)info.GetValue("_printFont", typeof(Font));
    }

当我反序列化它时,我如何传入并反对它?有点像这样

public object DeSerializeObject(string filename, someObject thing)
            {
                ......
                objectToSerialize = (object)bFormatter.Deserialize(stream, thing);
                .....
            }

public GUI_Settings(SerializationInfo info, StreamingContext ctxt, someObject thing)
        {

            PrinterFont = (Font)info.GetValue("_printFont", typeof(Font));
            _thing = thing;
        }

我不太确定我是否解释清楚,让我再试一次。

在我的主课中我说

_settings = (GUI_Settings)new ObjectSerializing()
    .DeSerializeObject("Settings.data");

或者如果我明白 Jalal Aldeen Saa'd 所说的话

_settings = (GUI_Settings)ObjectSerializing
    .DeserializeFromFile<GUI_Settings>("Settings.data");

当代码运行时,我需要向它发送对 _backend 类型 backEndInitializer 的引用。该引用保存在这个主类中。 GUI_Settings 是我要反序列化的类型。 _backend 是我需要发送 GUI_Settings() 方法才能使用的引用。


答案:

public static object DeSerializeObject(string filename, backEndInitializer backend)
    {
    object state = backend; // your object

    System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bFormatter =
        new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(
            null,
            new System.Runtime.Serialization.StreamingContext(
                System.Runtime.Serialization.StreamingContextStates.All,
                state)); // pass it in

    object objectToSerialize;
    Stream stream = File.Open(filename, FileMode.Open);
    //BinaryFormatter bFormatter = new BinaryFormatter();
    objectToSerialize = (object)bFormatter.Deserialize(stream);
    stream.Close();
    return objectToSerialize;
}

然后在正在反序列化的类中

public GUI_Settings(SerializationInfo info, StreamingContext ctxt)
        {
            _backend = (backEndInitializer) ctxt.Context;
}

最佳答案

        object state = null; // your object

        System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = 
            new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(
                null, 
                new System.Runtime.Serialization.StreamingContext(
                    System.Runtime.Serialization.StreamingContextStates.All, 
                    state)); // pass it in

从那里您可以在反序列化构造函数的上下文参数中访问它对象。 StreamingContext 将引用此实例

关于c# - 反序列化时传入对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6957637/

相关文章:

c# - SalesForce 查询方法不返回可用数据

c# - XmlSerializer 是否会转义 & 等特殊字符?

c# - 我应该如何处理 C# 到 JSON 序列化和循环引用?

python - 导入MsgPackSerializer时导入错误

c# - 如何获取已阅读的内容

c# - 从代码执行时 Handle.exe 不工作

c# - 相同的方法但不同的签名取决于 .NET 框架版本?

c# - 根据某个属性的值将一个列表拆分为多个列表

java - 简单的 XML 反序列化

android - 保存 ArrayList 内容的最佳方法是什么?