使用protobuf-net序列化System.Web.SessionState.SessionStateItemCollection
是否可行?尝试序列化时发生以下异常:
只能处理数据协定类(以及此类的列表/数组)(错误处理SessionStateItemCollection)
我需要做什么来序列化这个?
答案 0 :(得分:1)
我不认为这与[Flags]
有任何关系,除非你看到别的东西......
protobuf-net按照google定义的protobuf规范序列化对象,这是一种便携式格式,要求接收者事先知道特定数据的布局 - 我的意思是(与BinaryFormatter
不同)不包含任何说法“此对象是来自MyCorp.Something.Customer
的{{1}}”。这个“不存储对象是”的方法对json(MyCorp.Something.dll
),xml(JavaScriptSerializer
),XmlSerializer
等也很常见。 / p>
那么为什么这很重要?这很重要,因为会话状态存储了无法预测的任意对象。实际上,无法保证(特别是如果状态始终存储在内存中),对象甚至可以远程在任何方案下进行序列化。
但这取决于你的目标是什么;如果您想实现会话状态提供程序,那么这应该是可能的 - 但您只需要在提供程序中包含这些额外的元数据,就像我在编写cache provider时所做的那样。所以它会是:
DataContractSerializer
元数据GetType()
对对象进行编码(假设它可以通过protobuf-net序列化)Serialzier.NonGeneric
Type
解码对象另一种替代方法是简单地使用在内部处理类型元数据的Serializer.NonGeneric
,但为特殊类型挂钩BinaryFormatter
并将其转发到protobuf-net。这允许您的对象与非protobuf-net兼容的对象并排处理,但可以获得对象的增强序列化。代理ISerializable
的简短示例就是:
ISerializable