找不到合适的默认类型编码。使用protobuf序列化时

时间:2011-02-02 15:08:34

标签: protobuf-net

我有以下课程: -

[Serializable]
[DataContract(Name = "StateValueWrapper")]
public class StateValueWrapper
{
    [DataMember(Order = 1)]
    public Type StateValueType { get; set; }

    [DataMember(Order = 2)]
    public object WrappedObj { get; set; }
}

我正在尝试使用protobuf.net序列化上面的类的对象。虽然序列化得到错误“找不到合适的默认类型编码。”请告诉我我需要做什么?以下是我的诽谤代码: -

            MemoryStream ms = new MemoryStream();
            var srariazeObj = new StateValueWrapper();
            srariazeObj.StateValueType = typeof(int);
            srariazeObj.WrappedObj = 5;
            ProtoBuf.Serializer.NonGeneric.Serialize(ms, srariazeObj);

2 个答案:

答案 0 :(得分:1)

Type不能通过protobuf-net序列化,也不是object。我明白你要做什么,如果你老实说不能提前知道这些类型。我怀疑您应该考虑序列化该对象的AssemblyQualifiedName类型(string)和byte[](通过MemoryStream)。如果你愿意,我可以稍后举起一个例子(让我知道)。

但是,如果可以声明有限丢失您需要支持的类型(例如“string或int或Customer或Guid only ”)那么是一种更有效的方便的方法 - 如果这是你的情况,我可以再举一个例子 - 让我知道。

答案 1 :(得分:1)

现在,我已经创建了一个自定义会话提供程序并将其传递给StateValueWrapper对象。在serialize方法中,首先使用protobuf序列化StateValueWrapper的WrappedObj并将其分配回WrappedObj,现在二进制序列化器将序列化包含类型info和字节数组的StateValueWrapper对象。反序列化时,第一个二进制序列化器将反序列化SessionStateItemCollection并返回StateValueWrapper,类型为info和byte Array,然后我使用StateValueWrapper的类型信息完成了WrappedObj的反序列化(protobuf)。