C#存储用于序列化的临时数据

C#存储用于序列化的临时数据,c#,serialization,deserialization,C#,Serialization,Deserialization,我正在实现一个使用.NET内置序列化的类层次结构。由于这些类的性质以及.NET使用图形反序列化器处理反序列化的方式,我需要将临时数据存储在某个位置,等待它完全反序列化 我的所有课程目前都包含类似以下内容: class Example : ISerializable { private readonly dynamic _serialData = new ExpandoObject(); public ulong Id { get; private set; } public str

我正在实现一个使用.NET内置序列化的类层次结构。由于这些类的性质以及.NET使用图形反序列化器处理反序列化的方式,我需要将临时数据存储在某个位置,等待它完全反序列化

我的所有课程目前都包含类似以下内容:

class Example : ISerializable
{
  private readonly dynamic _serialData = new ExpandoObject();

  public ulong Id { get; private set; }
  public string[] Strings { get; private set; }

  protected Example( SerializationInfo info, StreamingContext context )
  {
    _serialData.Id = info.GetValue( nameof( Id ), typeof( ulong ) );
    _serialData.Strings = info.GetValue( nameof( Strings ), typeof( string[] ) );
  }

  public void GetObjectData( SerializationInfo info, StreamingContext context )
  {
    info.AddValue( nameof( Id ), Id );
    info.AddValue( nameof( Strings ), Strings );
  }

  [OnDeserialized]
  private void OnDeserialized( StreamingContext context )
  {
    Id = _serialData.Id;
    Strings = _serialData.Strings;
  }

}
我意识到,
OnDeserialized()
方法有时对于原语和其他不可枚举的类型来说是多余的,但我正在尝试将所有内容与引用子类等的更复杂类保持一致

说到这里,我的问题是:

我当前将临时数据存储在
\u serialData
字段中。一旦它被反序列化,就不再需要这个字段了。反序列化完成后,我可以很容易地清除该字段,但我更希望将其作为作用域变量存储在某个地方,当不再需要时进行垃圾收集

我看到
StreamingContext
是与序列化构造函数和方法一起传递的,但我并不真正理解它的用途,也看不到任何在其中存储临时数据的方法


有没有一种方法可以避免将
\u serialData
完全作为类字段?

首先想到的也是最简单的一件事是静态
条件弱表
()。您还可以定期检查表以查看哪些对象仍处于活动状态,并从表中删除垃圾收集的对象。或者在对象的析构函数中,让它们从表中删除自己。

.NET的内置序列化-您是指二进制格式化程序?@dbc Yes,我的对象实现了ISerializable,目前我正在使用BinaryFormatter对数据进行序列化和反序列化。然后您可以使用序列化代理。见例。