【问题标题】:Serializable Objects with MarshalByRefObject Fields具有 MarshalByRefObject 字段的可序列化对象
【发布时间】:2009-04-24 10:54:39
【问题描述】:

好的,我不确定这个问题是否已经被问过,所以如果它已经消失了。假设我们有两个这样的类

[Serializable]
public class ClassA
{
    private string _name;
    private ClassB _data;
}


public class ClassB : MarshalByRefObject
{
    public string GetAppDomainName()
    {
      return AppDomain.Current.FriendlyName;
    }  
}

如您所见,ClassA 持有对 ClassB 的引用,但 B 类继承自 MarshalByRefObject 类。我的问题是,当我尝试将 ClassA 传递给另一个 AppDomain 时,除了将 _data 字段作为透明代理传递给新的 AppDomain 之外,如何让 ClassA 以通常的方式序列化?

任何帮助表示赞赏:)

【问题讨论】:

  • [Serializable] -- 拼写;)
  • 哈哈 opps,错过了。谢谢。

标签: c# serialization marshalbyrefobject


【解决方案1】:

让 ClassA 从 MarshalByRefObject 派生,因为它是您想要远程到另一个 AppDomain 的对象。

你可以实现 ISerializable http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iserializable.aspx

类型在跨应用程序域边界使用时必须从 MarshalByRefObject 继承,并且不能复制对象的状态,因为对象的成员在创建它们的应用程序域之外不可用。

【讨论】:

  • 通常我会这样做,但是可以说我没有那个选项,并且该对象必须被序列化并且它必须包含一个继承自 MarshalByRefObject 的类。
  • 如何将 ClassA 包装在派生自 MashalByRefObject 的包装类中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
  • 2022-01-15
  • 2011-12-01
  • 2011-08-14
  • 1970-01-01
相关资源
最近更新 更多