gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:13:12 25 4
gpt4 key购买 nike

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

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 所说的话

_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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com