以下测试失败并显示以下错误:
“System.InvalidOperationException:No 找到合适的默认IB编码。“
[ProtoContract]
public class A
{
[ProtoMember(1)]
public IB B { get; set; }
}
public interface IB
{
}
[ProtoContract]
public class B : IB
{
[ProtoMember(1)]
public int SomeProperty { get; set; }
}
[TestFixture]
public class TestFixture
{
[Test]
public void Test()
{
var a = new A {B = new B()};
using (var m = new MemoryStream())
{
Serializer.Serialize(m, a);
}
}
}
我正在使用Protobuf.net的这个实现:
http://code.google.com/p/protobuf-net/
我错过了什么吗?非常感谢你。
答案 0 :(得分:1)
这是基于合同的序列化程序的一个常见功能,包括XmlSerializer
等(即那些不包含每个对象的类型元数据的序列化程序)。
有一些事情使这个棘手:
A.B
创建什么类型的文件?这是一个我希望在“v2”中获得某些工作的场景(但可能并不完全适合发布);我在想:
A.B
必须为非空才能开始(即A
决定A.B
的类型),或者必须在某处指定默认实现或者,也许更适合所呈现的场景,我们可以使用[ProtoInclude]
之类的东西来表示具体的类型。
但在这些限度内,我认为有可能。但不是今天。