Корпуса:как сериализовать Список <T> при Т не сериализуемый
Проходит unserializable перекрестного параметр AppDomain.
Ниже приведено несколько методов, которые я хочу позвонить в удаленный домен;
public RemoteClass
{
public Test(Class1 obj);
public Test(List<Class1> obj);
}
Определить:
Class1 : un-serializable
[Serializable]
Class2 : Class1 , ISerializable //mark Class2 serializable
{
//.....
}
следующий код, используемый для теста:
using (MemoryStream s = new MemoryStream())
{
BinaryFormatter f = new BinaryFormatter();
f.Serialize(s, obj);
}
результат теста:
obj result
Class1 obj=new Class1(); exception
Class1 obj=new Class2(); success
List<Class1> obj=new List<Class1); exception when obj contain some element;
obj.Add(new Class1();
List<Class1> obj=new List<Class1); exception when obj contain some element; //how???
obj.Add(new Class2();
List<Class2> obj=new List<Class2); success;
obj.Add(new Class2();
Class1 не является сериализуемым calss, и я не могу его изменить, поэтому я определяю Class2, который наследует Class1 и реализует ISerializable. Я могу передать экземпляр Class2
, когда метод нуждается в экземпляре Class1
в результате теста, и это решение успешно, однако для List<Class1>
это не сработает.
вы можете дать нам пример класса 1, которые могут вызвать проблемы и похожа на вашу проблему? Кажется, ваш вопрос должен быть: «Как я могу сделать этот класс сериализуемым?» – Steve
Class1 не является сериализуемым, и я не могу его изменить, поэтому я определяю Class2: Class1, Iserializable; теперь Class2 является сериализуемым, я передам Class2, когда необходимо, чтобы метод Class1 – Clover