Protobuf-net:使用隐藏成员不起作用

时间:2013-02-06 17:30:49

标签: .net protocol-buffers protobuf-net

使用带有隐藏字段的类型会导致“无法确定成员”异常 (V2通过RuntimeTypeModel没有任何属性)。

在MetaType.cs中删除此行中的长度检查可以解决问题 对于这个特殊用例。

 if(members != null && members.Length == 1) mi = members[0];

但我担心长度检查是有原因的,所以简单地删除它可能不是一个合适的解决方案。在这种情况下使用members[0]起作用,因为隐藏的基类成员位于数组的末尾。

我用例的简化示例:

public class SharedType
{
    public int Number { get; set; }
}

public class ClientType : SharedType
{
    public new long Number { get; set; }
}

var modelServer = RuntimeTypeModel.Create();
modelServer.Add(typeof(SharedType), false).Add("Number");

var ms = new MemoryStream();
modelServer.Serialize(ms, new SharedType() { Number = 10 });

var modelClient = RuntimeTypeModel.Create();
modelClient.Add(typeof(ClientType), false).Add("Number");

ClientType obj = (ClientType)modelClient.Deserialize(new MemoryStream(ms.ToArray()), null, typeof(ClientType));

实际上,我会用SharedNestedType替换int,用ClientNestedType替换long

0 个答案:

没有答案