【发布时间】:2015-06-04 09:59:25
【问题描述】:
我在我的 Web 应用程序中使用 自定义会话提供程序,它继承了 SessionStateStoreProviderBase 和覆盖方法。用于从会话中获取数据的方法的返回类型为 SessionStateStoreData。
目前二进制序列化被用于序列化和反序列化数据。我想使用 json 序列化 而不是二进制,但不确定如何将会话数据(json 序列化后的字符串类型)转换为 SessionStateStoreData 类型。 SessionStateStoreData 类型的构造函数使用 SessionStateItemCollection 类型的对象,该对象可以从 sessionstateitemcollection 的反序列化方法中获取,该方法只接受二进制流作为输入。
var ms = _serializedSessionData == null
? new MemoryStream()
: new MemoryStream(_serializedSessionData);
var sessionItems = new SessionStateItemCollection();
if (ms.Length > 0)
{
var reader = new BinaryReader(ms);
sessionItems = SessionStateItemCollection.Deserialize(reader);
}
return new SessionStateStoreData(sessionItems,
SessionStateUtility.GetSessionStaticObjects(context),
_timeout);
我附上了用于二进制反序列化的代码。 json序列化对象如何做同样的事情?
【问题讨论】:
-
您可以尝试将
json字符串转换为MemoryStream。 -
是的,但在这种情况下 sessionitems 将是 json 序列化字符串,而不是存储在 session 中的实际对象。
-
SessionStateItemCollection.Deserialize只接受BinaryReader。 -
是的,这就是问题所在。我在问是否可以使用任何替代品。
-
您真的需要
SessionStateItemCollection,还是实现ISessionStateItemCollection的集合就足够了? The former 有很多专门用于增量二进制反序列化的逻辑。
标签: c# asp.net json session serialization