Используя BinaryFormatter в C #, я пытаюсь десериализовать объекты из класса, который содержит свойство делегата.
После добавления члена в класс, указанный делегатом, десериализация прерывается.
Смотрите пример ниже.
Мне понадобится десериализация для работы, даже если я полностью проигнорирую проблематичное свойство делегата.
Например, если свойство делегата всегда десериализовано для обнуления, проблема будет решена.
Я не смог решить его, пометив свойство как [NonSerialized] или изменив его на поле.
Следующее будет описывать сериализованные объекты, которые я пытаюсь десериализовать.
public class mySerializedClass
{
public string thisIsOK1 {get; set;}
public string thisIsOK2 {get; set;}
public Func<myModelClass,bool> thisIsTheIssue {get; set;}
}
[Serializable]
public class myModelClass
{
// The issue happened after adding a new method to this class
public static bool testMethod(mySerializedClass obj)
{
// do stuff
return true
}
}
Как пример сериализованного экземпляра:
new mySerializedClass()
{
thisIsOK1 = "a";
thisIsOK2 = "b";
thisIsTheIssue = (o) => myModelClass.testMethod(o);
}
Правильным решением было бы всегда сериализовать / десериализовать свойство thisIsTheIssue в null.
В качестве дополнительной информации сообщение об исключении:
Невозможно получить член 'get_theNameOfMyDelegate b__19_0'.
И StackTrace Исключения:
в
System.Reflection.MemberInfoSerializationHolder.GetRealObject (StreamingContext
контекст) в
System.Runtime.Serialization.ObjectManager.ResolveObjectReference (ObjectHolder
держатель) в System.Runtime.Serialization.ObjectManager.DoFixups ()
в
System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize (HeaderHandler
обработчик, __BinaryParser serParser, логический fCheck, логический
isCrossAppDomain, IMethodCallMessage methodCallMessage) в
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (Stream
serializationStream, обработчик HeaderHandler, логическое значение fCheck, логическое значение
isCrossAppDomain, IMethodCallMessage methodCallMessage) в
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (Stream
serializationStream) в ... месте моего кода, где я десериализовываю ...