Protobuf-Net Extension方法不断抛出异常

时间:2012-08-05 16:32:00

标签: c# serialization .net-4.0 protobuf-net

我在VS2010中创建了一个带有.Net 4设置的示例应用程序。我正在尝试ProtoBuf-Net Extention方法。但是,每当我尝试调用GetValue扩展时,它会抛出异常

Method or operation is not implemented

堆栈跟踪:

   at ProtoBuf.ExtensibleUtil.GetExtendedValues[TValue](IExtensible instance, Int32 tag, DataFormat format, Boolean singleton, Boolean allowDefinedTag)
   at ProtoBuf.Extensible.TryGetValue[TValue](IExtensible instance, Int32 tag, DataFormat format, Boolean allowDefinedTag, TValue& value)
   at ProtoBuf.Extensible.TryGetValue[TValue](IExtensible instance, Int32 tag, DataFormat format, TValue& value)
   at ProtoBuf.Extensible.GetValue[TValue](IExtensible instance, Int32 tag, DataFormat format)
   at ProtoBuf.Extensible.GetValue[TValue](IExtensible instance, Int32 tag)
   at PhoneBookData.PhoneBookSerializer.Serialize(PhoneBookProto phData) in E:\project\PhoneBook\Source\PhoneBookData\PhoneBookSerializer.cs:line 14
   at ConsoleApplication1.Program.Main(String[] args) in E:\project\PhoneBook\Source\ConsoleApplication1\Program.cs:line 23
   at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

以下是具有Extention支持的Proto类。

[ProtoContract]
public class PhoneBookProto : Extensible
{
    [ProtoMember(1, IsRequired=true)]
    public string Name { get; set; }
    [ProtoMember(2)]
    public string Email { get; set; }
    [ProtoMember(3)]
    public AddressProto Address { get; set; }
    [ProtoMember(4,IsRequired=true)]
    public string PhoneNumber { get; set; }
}

[ProtoContract]
public class AddressProto
{
    [ProtoMember(1)]
    public string Line1 { get; set; }
    [ProtoMember(2)]
    public string Line2 { get; set; }
}

我做错了什么。我参考了最新的protobuf版本(561)可供下载。下面是我的代码,它不断崩溃。

Extensible.AppendValue<int>(phData, 5, 10);
Extensible.GetValue<int>(phData, 5);

修改 其他旧版本的protobuf也给了我同样的例外

1 个答案:

答案 0 :(得分:1)

事实上。扩展数据是自v2重写以来缺少的最后一个数据。正如你所看到的那样next on the roadmap,但是实用(时间可用性等)我必须首先优先考虑最常见的.NET场景。扩展数据并不是最常见的用法。 V1具有完全可用的扩展数据API,并且r280(IIRC)仍然可用。

一旦我进入这个,我没有预料到(之前曾经写过一次)它是一项巨大的工作,所以我希望它很快会在构建中。


编辑:这应该从r565开始提供