我们使用ASP.NET viewstate来存储我们自己的对象(即,不仅仅是原始类型)。每次我们进行构建时,构建号都会增加。我们试图解决的问题是在服务器更新期间:
用户在同一页面上进行回发,并抛出异常:
我理解为什么会发生这种情况 - ViewState是使用该类的先前版本序列化的,然后尝试使用新版本进行反序列化,而.NET序列化不支持该版本。
我们考虑过创建一个自定义的PageStatePersister并使用JSON(然后加密它)来序列化/反序列化,因为数据成员几乎总是在构建之间兼容。
还有其他想法吗?
答案 0 :(得分:1)
首先,在viewstate上序列化数据并不是一个好主意,其中一个原因是这种反序列化与您的表现不匹配,但另一个问题是数据正在传送到服务器并返回每个回发。
我会使用一种简单的存储库方法,例如将数据存储在缓存或会话中,这样您就可以询问存储库,无论它在何处以及如何持久存储,这都用于模拟内存存储库。所以你有类似“MyDataSotarage.GetMyCustomObject()”和“MyDataSotarage.SaveMyCustomObject(CustomObject obj)”之类的内容,因此在存储库中有你的逻辑将项添加到缓存(例如使用userid和objct名称作为键)或session如果你喜欢(不要害怕他们,有些人会这样做)。它更像是一种设计方法,而不是实现方法,但通过这种方式,您将完全分离数据的存储方式,避免序列化问题,并节省网络流量的KB等。