我遇到了 protobuf-net 的问题,并将其缩小到这个最简单的情况。我想要一个链表类型结构,其中一个类具有相同类型的属性。当我序列化它时,它工作得很好。但是,如果类型是接口而不是类,我会收到以下错误:一旦为 ConsoleApplication1.foo (ConsoleApplication1.ifoo) 生成了序列化程序,就无法更改类型
这是我必须生成此错误的代码:
class Program
{
static void Main(string[] args)
{
var toSerialize = new foo();
toSerialize.data = "foo1";
var subf = new foo();
subf.data = "foo2";
toSerialize.subfoo = subf;
using (var pbfsc = new FileStream("testfile.proto", FileMode.Create))
{
using (var cs = new GZipStream(pbfsc, CompressionMode.Compress))
{
ProtoBuf.Serializer.Serialize(cs, toSerialize);
}
pbfsc.Close();
}
}
}
[ProtoContract, ProtoInclude(2000, typeof(foo))]
public interface ifoo
{
[ProtoMember(1)]
string data { get; set; }
[ProtoMember(2)]
ifoo subfoo { get; set; }
}
[ProtoContract]
public class foo : ifoo
{
[ProtoMember(1)]
public string data { get; set; }
[ProtoMember(2)]
public ifoo subfoo { get; set; }
}
我已经完成了所有关于该主题的阅读,但我看不出我做错了什么。我尝试将我的对象放在一个包装类中,因为它看起来类似于接口列表的问题(代码未显示),但这仍然没有帮助。
如果我将 subfoo 更改为 foo 类型,那么它可以正常工作,但在我更复杂的现实世界问题中,我宁愿坚持使用界面。我在这里做错了什么还是protobuf-net有问题?
非常感谢任何帮助。
干杯
亚历克斯