Protobuf异常 - 未将对象引用设置为对象的实例

时间:2017-07-23 09:36:43

标签: protobuf-net proto protobuf-csharp-port

我正在尝试使用protobuf序列化我的下面的类,但它失败了"对象引用"错误。更多细节如下。通过查看错误详细信息,任何想法可能是错的? 注意:我的用户对象太大,它有很多子对象和属性。所以不要在这里添加User类详细信息。

[ProtoContract]
public class MyPrincipal
{

    public MyPrincipal(string Id, int myId)
    {
        this.Id = Id;
        this.MyId = myId;
        this.Principals = new Dictionary<MyPrincipalType, User>();         
    }

    [ProtoMember(1)]
    public string Id { get; set; }


    [ProtoMember(2)]
    public int MyId { get; set; }

    [ProtoMember(3)]
    public Dictionary<MyPrincipalType, User> Principals { get; set; }


    public MyPrincipal AddPrincipal(MyPrincipalType principalType, User principalValue)
    {
        this.Principals.Add(principalType, principalValue);
        return this;
    }
}


public enum MyPrincipalType
{
   Test = 0
}

以下是错误详情:

  

异常: {&#34;对象引用未设置为对象的实例。&#34;}

     ProtoBuf.Serializers.TagDecorator.get_ExpectedType()

Inner StrackTrace:      在ProtoBuf.Serializers.DefaultValueDecorator..ctor(TypeModel model,Object defaultValue,IProtoSerializer tail)      在ProtoBuf.Serializers.MapDecorator`3..ctor(TypeModel模型,Type concreteType,IProtoSerializer keyTail,IProtoSerializer valueTail,Int32 fieldNumber,WireType wireType,WireType keyWireType,WireType valueWireType,Boolean overwriteList)

     在System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr,Binder binder,Object)中的System.RuntimeMethodHandle.InvokeMethod(Object target,Object []参数,Signature sig,布尔构造函数)

外部StackTrace: []参数,CultureInfo文化)在System.Reflection.ConstructorInfo.Invoke(Object []参数)的ProtoBuf.Meta.ValueMember.BuildSerializer()在ProtoBuf.Meta.ValueMember.get_Serializer()在ProtoBuf.Meta.MetaType.BuildSerializer( )ProtoBuf.Meta.Meta上的ProtoBuf.Meta.Meta中的ProtoBuf.Meta.Meta中的ProtoBuf.Meta.Meta上的ProtoBuf.Meta.Meta中的ProtoBuf.Meta.Meta中的ProtoBuf.Meta上的ProtoBuf.Meta中的ProtoBuf.Meta的线程     ProtoBuf.Meta中的ProtoBuf.Meta.TypeModel.Serialize(Stream dest,Object value,SerializationContext context)ProtoBuf.Serializer.Serialize [T](Stream destination,T instance)的ProtoBuf.Meta.Serialize(Stream dest,Object value) / p>

此问题仅适用于最新的nuget版本2.3.0。当我使用版本2.0.0.668时,这很好。

1 个答案:

答案 0 :(得分:0)

这是一个库bug,看起来很讨厌。我有logged it as an issue

有一种解决方法:暂时禁用字典上的“地图”处理 - 将[ProtoMap(DisableMap = true)]添加到Principals。代码已修复,应包含在2.3.1中。我将审查2.3.1的其他候选人,并决定保证发送提示 - 将其余部分移至2.3.2(因此我们可以尽快通过此修复发送2.3.1)。