如何反序列化接口类型?

dr.*_*vil 5 .net c# serialization interface

我序列化一个包含一个名为Modelas 的属性的类,IModel但是当我尝试反序列化它时,我得到以下异常:

System.Runtime.Serialization.SerializationException: Type 'MYN.IModel' in Assembly 'MYN.Defs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
Run Code Online (Sandbox Code Playgroud)

这是二进制序列化.Model标记为可序列化.显然IModel不是.

那么解决方案是什么,我做错了什么?为什么它试图对接口进行seriliaze或反序列化呢?

PS接口没有Enum.

Hen*_*man 5

获取该错误是有意义的,因为IModel属性可以引用不同的类,并且不能保证它们都是Serializable.


好的,我试一试,我们有一个:

测试用例错误,它可以在我的电脑上运行.


interface IFoo { }

[Serializable]
class CFoo : IFoo   { }

[Serializable]
class Bar
{
    public IFoo Foo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和Bar序列化和反序列化很好.

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");
}
Run Code Online (Sandbox Code Playgroud)

那么,有什么不同于你IModelModel

  • 对于二进制序列化没有意义,二进制序列化也将具体类型序列化,因此如果和IModel指向Model对象,则序列化类型信息将包含足够的信息以反向反序列化Model对象. (3认同)