我正在尝试使用 protobuf 序列化我的下面的类,但它因“对象引用”错误而失败。更多细节如下。知道通过查看错误详细信息可能会出现什么问题吗?注意:我的用户对象太大,它有很多子对象和属性。所以不要在这里添加用户类的详细信息。
[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
}
以下是错误详细信息:
例外: {“对象引用未设置为对象的实例。”}
Inner StrackTrace: 在 ProtoBuf.Serializers.TagDecorator.get_ExpectedType() 在 ProtoBuf.Serializers.DefaultValueDecorator..ctor(TypeModel model, Object defaultValue, IProtoSerializer tail) 在 ProtoBuf.Serializers.MapDecorator`3..ctor(TypeModel model, Type concreteType, IProtoSerializer keyTail, IProtoSerializer valueTail, Int32 fieldNumber, WireType wireType, WireType keyWireType, WireType valueWireType, Boolean overwriteList)
外部堆栈跟踪:在 System.RuntimeMethodHandle.InvokeMethod(对象目标,Object[] 参数,签名 sig,布尔构造函数)在 System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr,Binder binder,Object[] 参数,CultureInfo 文化)在 System.Reflection.ConstructorInfo .Invoke(Object[] parameters) at ProtoBuf.Meta.ValueMember.BuildSerializer() at ProtoBuf.Meta.ValueMember.get_Serializer() at ProtoBuf.Meta.MetaType.BuildSerializer() at ProtoBuf.Meta.Meta.MetaType.get_Serializer() at ProtoBuf .Meta.RuntimeTypeModel.Serialize(Int32 key, Object value, ProtoWriter dest) at ProtoBuf.Meta.TypeModel.SerializeCore(ProtoWriter writer, Object value) at ProtoBuf.Meta.TypeModel.Serialize(Stream dest, Object value, SerializationContext context) at ProtoBuf.Serializer 中的 ProtoBuf.Meta.TypeModel.Serialize(Stream dest, Object value)。序列化[T](流目的地,T 实例)
此问题仅适用于最新的 nuget 版本 2.3.0。当我使用 2.0.0.668 版本时,它工作正常。