Сериализуемые объекты с полями MarshalByRefObject

Хорошо, я не уверен, что этот вопрос задавали раньше, так что если он был, то сжечь. Допустим, у нас есть два таких класса

[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, как я могу заставить ClassA сериализоваться, как обычно, за исключением передачи поля _data в новый AppDomain в качестве прозрачного прокси?

Любая помощь приветствуется :)


person Zerodestiny    schedule 24.04.2009    source источник
comment
[Сериализуемый] - правописание;)   -  person Chad Grant    schedule 24.04.2009
comment
хаха оппс, пропустил. Спасибо.   -  person Zerodestiny    schedule 24.04.2009


Ответы (1)


Пусть ClassA является производным от MarshalByRefObject, так как это объект, который вы хотите переместить в другой домен приложения.

И вы можете реализовать ISerializable http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iserializable.aspx

Типы должны наследоваться от MarshalByRefObject, когда тип используется вне границ домена приложения, и состояние объекта нельзя копировать, поскольку элементы объекта нельзя использовать за пределами домена приложения, в котором они были созданы.

person Chad Grant    schedule 24.04.2009
comment
Обычно это то, что я бы сделал, однако скажем, что у меня нет этой опции и что объект должен быть сериализован, и он должен содержать класс, наследуемый от MarshalByRefObject. - person Zerodestiny; 24.04.2009
comment
Как насчет того, чтобы обернуть ClassA в класс-оболочку, производный от MashalByRefObject? - person Chad Grant; 24.04.2009