我有以下课程: -
[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);
答案 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)。