回答
ViewState
使用二进制序列化使用ObjectStateFormatter进行序列化。从文档引用:
的ObjectStateFormatter类是 优化序列化和格式许多 常见的.NET Framework引用类型, 以及常数。以下 表格列出了 优化的类型。
阵列,日期时间,Int16类型,字符串,ArrayList中, 双人,的Int32,字符串[],布尔型,枚举, 空(没有),的String.Empty,字节, 哈希表,对,三重峰,CHAR, HybridDictionary的,单身,类型,颜色, IDictionary的,
另外,虽然 常规串类型和字符串 阵列被写入并从 串行二进制作家不变, 某些字符串通过创建 内部字符串表优化。如果 字符串具有关联的TypeConverter 对象或者该字符串实际上是IndexedString类的 实例,则使用这些表优化字符串 。
上面未列出的其它类型的是 二进制序列化使用 BinaryFormatter的对象,如果他们 实现ISerializable接口 或与 SerializableAttribute属性装饰。对于任何这些 可序列化类型,ObjectStateFormatter类不是 。
如果ObjectStateFormatter类 遇到不是 可串行化的类型,则会抛出ArgumentException 异常。
对于一个对象为二进制在它需要的ViewState
序列与[Serializable]
属性进行装饰。因此,您可以在ViewState
中放入任何具有此属性的对象。请注意,像string,int,float等简单类型也可以放在ViewState
中。
类型必须可序列化才能放置在ViewState中。 ViewState是对象的序列化集合,所以任何可序列化的对象都可以放在那里。
几乎任何可序列化的东西。但是,请记住,数据将通过服务器和Web浏览器之间的线路发送(并且在回发期间返回),因此如果可能的话,您可能希望减小音量。
什么对象 - 根据达伦和安德鲁 - 任何可序列化的对象。 为什么要Serializable?因此,国家可以然而在实践中连载像
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTY1NTgzODUwMg9kFgJmD2QWAgIDD2QWAgIBD2QWBgIBDw8WAh4EVGV4dAUXU3VwcGxpZXIgUG9y
,需要保持视图状态到最低限度,因为它具有带宽/页面大小的性能影响。 控件是视图状态最常见的用户。
不要在ViewState中放置Guid类型的对象。 ObjectStateFormatter无法识别它们,并且在使用BinaryFormatter时每个GUID有大约130个字节时会发生卡住。你最好将它们存储为字符串并在阅读时解析它们。然而,这并不总是有效,例如,当将Guid用作网格中的关键字时。另外,在ViewState中加载/保存枚举时,你可以通过将它们从/转换为整型来获得一些信息。在你的控件属性中,你知道所需的枚举类型,并且不需要在序列化的ViewState中进行编码。
支付使用Reflector来检查ObjectStateFormatter的实现以查看如何处理所有内容,以便您对过程及其局限性有所了解。
- 1. 我们可以显示不同类型的地图视图吗?
- 2. 我们可以放置crossdomain.xml
- 3. 我们可以在另一个容器视图中放置容器视图吗?
- 4. Android <selector>可以基于对象状态而不是视图状态吗?
- 5. 在我的对象状态,类声明
- 6. 我们可以设置一个类的对象的属性吗?
- 7. MediaElement可播放哪些类型的视频?
- 8. 我们可以在页面的卸载事件时访问视图状态和会话对象
- 9. 我们可以给我们的类型的Android地图
- 10. 我在哪里实例化我的视图模型对象?
- 11. 我们可以在HashMap中为K分配哪些类型<K,V>?
- 12. datareader可以存储在视图状态?
- 13. 我可以在Docker Nginx容器中放置哪些功能?
- 14. 我在哪里可以找到这些扩展的MIME类型?
- 15. 我的视图中的可为空的类型导致模型状态错误
- 16. 哪些是我可以在iPhone上看到的实际视图?
- 17. 允许某个对象在某处放置一些类型
- 18. 如何在视图状态下存储对象?
- 19. 我可以使对象类型可配置吗?
- 20. 表格视图行在移动时可以保持放置状态吗?
- 21. 我们可以改变飞机状态的系统设置吗?
- 22. DotNetFactory可以访问哪些对象?
- 23. 我们可以把getter和setter放在抽象类中吗?
- 24. 我们可以播放黑白视频
- 25. 我可以在哪里放置静态字符串?
- 26. 视图状态下的序列化对象
- 27. 我可以在appWidget中使用哪些视图?
- 28. 无法从视图状态施放对象集合
- 29. 有哪些可能的cfthread状态?
- 30. 以编程方式将视图对象放置在最近的邻居下方