Сериализуемые объекты с полями MarshalByRefObject
-
16-09-2019 - |
Вопрос
Хорошо, я не уверен, задавался ли этот вопрос раньше, так что, если да, то отпустите его.Допустим, у нас есть два таких класса, как этот
[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 в качестве прозрачного прокси?
Любая помощь приветствуется :)
Решение
Сделайте ClassA производным от MarshalByRefObject, поскольку это объект, который вы хотите удалить в другой домен приложения.
И вы можете реализовать ISerializable http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iserializable.aspx
Типы должны наследоваться от MarshalByRefObject, когда тип используется за границами домена приложения, и состояние объекта не должно копироваться, поскольку члены объекта не могут быть использованы за пределами домена приложения, где они были созданы.