Я связался с их службой поддержки, и они объяснили, что, по крайней мере, в моем регионе они прибавили 3,5% к обменному курсу XE.com. Я смог передать это моему бухгалтеру и использовать в качестве доказательства не облагаемых налогом расходов на ведение бизнеса.
Имеет смысл получить эту ошибку, потому что свойство IModel
может относиться к разным классам, и нет гарантии, что все они являются сериализуемыми.
Хорошо, я попробовал, и мы получили:
interface IFoo { }
[Serializable]
class CFoo : IFoo { }
[Serializable]
class Bar
{
public IFoo Foo { get; set; }
}
И панель сериализует и десериализует нормально.
Bar b = new Bar();
b.Foo = new CFoo();
using (var s = new System.IO.MemoryStream())
{
var bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
bf.Serialize(s, b);
s.Position = 0;
b = (Bar)bf.Deserialize(s);
Console.WriteLine("OK");
}
Итак, чем отличается ваша IModel
и Model
?
Я подозреваю, что это потому, что во время десериализации он инициирует новый экземпляр класса, а затем копирует в него данные. Он не может создать новый интерфейс, поэтому десериализация не может быть завершена. Вот почему вам нужен конструктор, который не принимает аргументов для сериализации.
Не уверен в решении, я никогда не работал над этим. Я бы, вероятно, переопределил класс и унаследовал свойство с конкретным типом, а затем сериализовал бы его.
Возможно, вам нужно неявно раскрыть это свойство внутри вашего класса:
вместо
Свойство IModel.Model
add
public MyClass Model
I Я почти уверен, что вы не можете сериализовать / десериализовать интерфейсы, только экземпляры классов. Я не могу найти никакой документации, подтверждающей это, но помню, как безуспешно пытался сделать то же самое.