C# Lightwieght可序列化和解析友好的数据结构,用于存储服务器控件属性

C# Lightwieght可序列化和解析友好的数据结构,用于存储服务器控件属性,c#,asp.net,data-structures,controls,viewstate,C#,Asp.net,Data Structures,Controls,Viewstate,我使用的是asp.net服务器控件,不想将服务器控件属性存储在可怕的视图状态中。所以我需要某种c#中的数据结构来存储这些属性,并将它们序列化为客户机隐藏状态。有没有人做过一项研究,研究哪种方法可以给我提供最好的性能,删除冗余密钥,哪种方法可以提供简单的序列化/反序列化过程,哪种方法还可以提供防止篡改的安全性。SessionState不是一个很好的选择,对于那些想这样做的人来说,你可以定义一个简单的类,将实例序列化为二进制,然后对该二进制进行Base64编码,并在隐藏字段中使用它。如果您想防止篡改

我使用的是asp.net服务器控件,不想将服务器控件属性存储在可怕的视图状态中。所以我需要某种c#中的数据结构来存储这些属性,并将它们序列化为客户机隐藏状态。有没有人做过一项研究,研究哪种方法可以给我提供最好的性能,删除冗余密钥,哪种方法可以提供简单的序列化/反序列化过程,哪种方法还可以提供防止篡改的安全性。SessionState不是一个很好的选择,对于那些想这样做的人来说,你可以定义一个简单的类,将实例序列化为二进制,然后对该二进制进行Base64编码,并在隐藏字段中使用它。如果您想防止篡改,我建议包含另一个隐藏字段,该字段包含由序列化数据构造的哈希和一个可以保存在服务器端的密钥。然后,您可以在表单post上再次构造相同的密钥,并将其与您在隐藏字段中收到的密钥进行比较。

您说要以客户端隐藏状态存储数据。ViewState正是这样做的:我认为微软设计它是为了紧凑。什么使你认为你可以做得更好


我想没有什么灵丹妙药,如果您想在客户端存储状态,请坚持使用ViewState。

我确信有一种内置数据结构的方法比我创建一个类更快。因为它基本上只深入到字符串,所以您可以使用
List
。通过上述方法,您几乎可以使用任何标记为
可序列化的内置数据类型。我同意,但一些初步测试表明,向viestate添加单个字符会导致隐藏字段最多添加10个字符,这对带宽来说是多么友好。还有,为什么不将我的属性
列表
序列化为Json格式并存储在隐藏字段中,然后将其检索回来呢then@Deeptechtons,您必须记住,当您在ViewState中存储一个数据字符时,它还需要存储元数据来描述该字符表示的内容。通过选择启用ViewState的控件,通常可以获得可接受的页面大小。任何自主开发的解决方案都可能不那么安全,也不太容易维护——ViewState是由一些聪明的工程师设计的。同意100%,OP正试图在这里重新发明轮子。如果您对viewstate的大小不满意,可能是因为您没有对其进行适当调整。这篇文章对我很有帮助: