2

以下のコード スニペットは、アイテムをシリアライズし、インターフェイスを使用してデシリアライズしようとします。例のように、インターフェイスから継承された型を逆シリアル化する方法を説明してください

class Program
{
 static void Main()
 {
 Item item = new Item { A = 123321 };

 using (MemoryStream ms = new MemoryStream())
 {
 Serializer.Serialize(ms  item);
 ms.Position = 0;
 Serializer.Deserialize<IItem>(ms);
 }
 }
}


ProtoInclude(100  typeof(Item))
public interface IItem
{
 int A { get; set; }
}

public class Item : IItem
{
 ProtoMember(1)
 public int A { get; set; }
}

エラーを発生させます:

The type can't be Updated once a serializer has been produced for test.Item >(test.IItem)
at ProtoBuf.Meta.RuntimeTypeModel.GetKey(Type type  Boolean demand  Boolean getBaseKey) in C:\Dev\protobuf-net\protobuf-net\Meta\RuntimeTypeModel.cs:line 388
at ProtoBuf.Meta.RuntimeTypeModel.GetKeyImpl(Type type) in C:\Dev\protobuf-net\protobuf-net\Meta\RuntimeTypeModel.cs:line 362
at ProtoBuf.Meta.TypeModel.GetKey(Type& type) in C:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:line 982
at ProtoBuf.Meta.TypeModel.DeserializeCore(ProtoReader reader  Type type  Object value  Boolean noAutoCreate) in C:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:line 576
at ProtoBuf.Meta.TypeModel.Deserialize(Stream source  Object value  Type type  SerializationContext context) in C:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:line 506
at ProtoBuf.Meta.TypeModel.Deserialize(Stream source  Object value  Type type) in C:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:line 488
at ProtoBuf.Serializer.DeserializeT(Stream source) in C:\Dev\protobuf-net\protobuf-net\Serializer.cs:line 69
at test.Program.Main() in ...
4

1 に答える 1