- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试序列化一个 FormCollection 对象,根据我的研究,它继承了 NameObjectCollectionBase,因此它也继承了 GetObjectData 和 ISerializable。这是否意味着它是可序列化的?
https://msdn.microsoft.com/en-us/library/system.web.mvc.formcollection(v=vs.118).aspx
这是我正在尝试的片段:
BinaryFormatter formatter = new BinaryFormatter();
//Serialize
using (MemoryStream stream = new MemoryStream())
{
formatter.Serialize(stream, data);
string test = Convert.ToBase64String(stream.ToArray());
Session["test"] = test;
};
//Deserialize
using (MemoryStream stream = new MemoryStream(Convert.FromBase64String((string)Session["test"])))
{
data = (FormCollection) formatter.Deserialize(stream);
}
不幸的是,我遇到了这个错误:
System.Runtime.Serialization.SerializationException: Type 'System.Web.Mvc.FormCollection' in Assembly 'System.Web.Mvc, Version=5.2.3.0, Culture=neutral... is not marked as serializable.
因为这是一个密封类,我无法扩展它并添加 [Serializable] 属性。
我的问题是:
为什么我不能像这样序列化 FormCollection?
以及如何序列化/反序列化 FormCollection 对象?
最佳答案
不能这样序列化,因为它缺少[Serializable]
属性。这意味着此类的开发人员无意使其可序列化(使用 BinaryFormatter
)。事实上,它的父类实现了 ISerializable
并标有 [Serializable]
并没有改变任何东西——子类可能有它自己的内部细节,如果被允许,这些细节将在序列化过程中丢失序列化可序列化类的任何后代。
如果您想使用 BinaryFormatter
(这可能是也可能不是最好的方法)- 您可以这样做:
BinaryFormatter formatter = new BinaryFormatter();
//Serialize
string serialized;
using (MemoryStream stream = new MemoryStream())
{
// pass FormCollection to constructor of new NameValueCollection
// that way we kind of convert it to NameValueCollection which is serializable
// of course we lost any FormCollection-specific details (if there were any)
formatter.Serialize(stream, new NameValueCollection(data));
serialized = Convert.ToBase64String(stream.ToArray());
};
//Deserialize
using (MemoryStream stream = new MemoryStream(Convert.FromBase64String(serialized))) {
// deserialize as NameValueCollection then create new
// FormCollection from that
data = new FormCollection((NameValueCollection) formatter.Deserialize(stream));
}
关于c# - 如何序列化和反序列化 FormCollection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44415592/
我有一个 View ,其中包含自动生成的 text 类型的 input 框。当我单击“通过电子邮件发送结果”按钮时,代码会将您带到 CalculatedResults Controller 中的 Em
我正在尝试序列化一个 FormCollection 对象,根据我的研究,它继承了 NameObjectCollectionBase,因此它也继承了 GetObjectData 和 ISerializa
这个问题在这里已经有了答案: How do you handle multiple submit buttons in ASP.NET MVC Framework? (35 个答案) 关闭 9 年前
我有一个 FormCollection 被传回 Controller ,该 Controller 已被处理,但是,如果其 true 则传回的值是 'true,false' 但如果未选中它,则只是 '假
我想对如下方法进行单元测试: public ActionResult StoreFile(FormCollection form, string _paginaAtual) { Sessio
有没有很好的linqy 拆分FormCollection 的方法?进入Dictionary只包含那些以特定字符串开头的键? (这个问题和这个基本一样->但是针对 C#/FormCollection 而
我在 View 中有一堆列表框,每个列表框都有一个唯一的名称/ID。提交时操作方法相应地接收数据,即键 = 列表框名称和值 = 该列表框的所有选定值。 我如何获取任何一个键的所有值并使用 foreac
我有一个复选框和按钮: @using(Html.BeginForm()) { Include completed } Controller 中的第
用户在其浏览器中的表中插入新记录,无需回发(使用 jQuery)。完成后,用户按下“保存”,我需要将所有新表行数据回发到服务器。我知道可以将 $.post 与参数一起使用。如何使用通用回发(form.
我的 FormCollection 返回一个复选框,但我在寻找值 collection["SelectedCheckbox"] 这将返回“真,假” 但我想要结果,该结果应该是 true 或 false
我的项目是 ASP.NET MVC 之一。在 View 中,我正在创建一个 Html 文本框并使用 attr 在 javascript 中禁用它。 Disable= function(){ $(
我正在查看一个代码块,但无法理解行中发生的事情 - formValues.AllKeys.Contains("Email_"+ i); 看起来应该进行分配地方但是... public ActionRe
我有两个函数,一个接收 FormCollection,另一个接收 HttpRequest,如下所示: public void SetUrlParameters(FormCollection reque
作为引用,这是在 C# MVC2 网站中。 我想在我的数据库中使用模型保存数据,但我需要使用自定义数据而不是我习惯的 FormCollection 来保存数据。以下是我通常的做法: TryUpdate
我有一个 MVC 4 CRUD 表单。该模型有一个属性 MyProp,其类型是一个枚举: public enum MyType { Item1, Item2 } 在我看来,我有: @H
我已经尝试了通常的方法: var form = new FormCollection { "WeekList" = weekfilter, "PracticeList" = practicefilte
对于我正在构建的示例应用程序,当我尝试在我的 View 上执行 ajax 更新时,我目前被迫将 FormCollection 对象传递到我的操作方法中。 我选择通过 FormCollection 的原
我在注册表里做单元测试,进不去FormCollection 中的值 .. 因为当你有表单集合时它必须做这个测试? 最佳答案 当您说不能向 FormCollection 添加值时,我不确定您的意思: F
我有一个搜索页面,它有 6 个文本框,我将它们作为 FormCollection 传递给 Controller 中的操作。如果文本框中没有值,我不想搜索记录。 有没有办法遍历 FormCollec
任何人都知道如何转换 FormCollection成IDictionary或如何获得 IDictionary在岗位行动? 最佳答案 这只是 Omnu 代码的等价物,但对我来说似乎更优雅: Dictio
我是一名优秀的程序员,十分优秀!