C# 一旦生成序列化程序,就无法更改类型
以下代码尝试序列化项并使用其接口反序列化:C# 一旦生成序列化程序,就无法更改类型,c#,.net,protobuf-net,C#,.net,Protobuf Net,以下代码尝试序列化项并使用其接口反序列化: class Program { static void Main() { Item item = new Item { A = 123321 }; using (MemoryStream ms = new MemoryStream()) { Serializer.Serialize(ms, item); ms.Position = 0;
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);
}
}
}
[ProtoContract(SkipConstructor = true)]
[ProtoInclude(100, typeof(Item))]
public interface IItem
{
int A { get; set; }
}
[ProtoContract(SkipConstructor = true)]
public class Item : IItem
{
[ProtoMember(1)]
public int A { get; set; }
}
有什么想法/解决方法吗?谢谢 是的,这是一个错误;短版本。。。不要将接口用作根(最外层)类型。已记录并计划修复;只是极客时间有限。接口作为成员正常工作;只是不是作为根对象。感谢您的快速响应。你有没有可能把它作为答案贴出来,这样我就可以把它标记为正确的答案?
The type cannot be changed once a serializer has been generated 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.Deserialize[T](Stream source) in C:\Dev\protobuf-net\protobuf-net\Serializer.cs:line 69
at Test.Program.Main() in ...