C# 从MVC2更新到MVC3后MVC序列化程序出现问题

C# 从MVC2更新到MVC3后MVC序列化程序出现问题,c#,.net,asp.net-mvc-3,serialization,deserialization,C#,.net,Asp.net Mvc 3,Serialization,Deserialization,我在我的一个视图中使用helperHtml.Serialize来序列化一个对象,然后在控制器中使用MvcSerializer再次对其进行反序列化,如下所示: (RegistrationViewModel) new MvcSerializer().Deserialize(serializedObject); 这在以前工作得很好,但在升级到MVC3(和MVC3 Futures)之后,反序列化方法发生了更改,因此它现在又有一个参数:SerializationMode 我可以将其设置为Signed或e

我在我的一个视图中使用helper
Html.Serialize
来序列化一个对象,然后在控制器中使用MvcSerializer再次对其进行反序列化,如下所示:

(RegistrationViewModel) new MvcSerializer().Deserialize(serializedObject);
这在以前工作得很好,但在升级到MVC3(和MVC3 Futures)之后,
反序列化
方法发生了更改,因此它现在又有一个参数:SerializationMode

我可以将其设置为
Signed
encrypted和Signed

无论我使用哪种方式,我都会收到一个
SerializationException
,要求我验证数据是否以我尝试反序列化的相同模式序列化

在我看来,由于某种原因,IntelliSense不适用于Serialize方法,因此我不知道这是否也会导致任何额外的重载

但问题很简单:我现在如何在
MVC3
中反序列化控制器中的数据,这些数据是我在视图中用
Html.Serialize
序列化的

编辑-添加了一些代码

从控制器

私有注册ViewModelRegisteredAccount

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
  var serialized = Request.Form["regData"];
  if (serialized != null)
  {
    registeredAccount = (RegistrationViewModel) new MvcSerializer().Deserialize(serialized, SerializationMode.EncryptedAndSigned);
    TryUpdateModel(registeredAccount); 
  }
  else
    registeredAccount = (RegistrationViewModel)TempData["regData"] ?? new RegistrationViewModel();
}

public ActionResult Index()
{
  if (Request.Form["nextButton.x"] != null)
    return RedirectToAction("Details");
  return View(registeredAccount);
}
从视图(序列化调用位于表单的开头)

@model VektNed.Models.RegistrationViewModel
...
@使用(Html.BeginForm()){
@Serialize(“regData”、Model、SerializationMode.encrypted和signed)

e-posten din benyttes som brukernavn forålogge inn

e-post@Html.EditorFor(x=>x.Account.Email)

gjenta电子邮政

del din e-post med andre brukere@Html.EditorFor(x=>x.Account.ShareEmail)

fornavn@Html.EditorFor(x=>x.Account.FirstName)

etternavn@Html.EditorFor(x=>x.Account.LastName)

ønsket passord@Html.EditorFor(x=>x.Password)

吉恩塔·帕索德

}

为什么要像这样手动反序列化对象,而不是使用
[反序列化]
属性:

[HttpPost]
public ActionResult Index([Deserialize] RegistrationViewModel registrationModel)
{
    ...
}
就第二个参数而言,它必须与在视图中序列化它时使用的枚举值相匹配。例如,如果你认为你做到了:

@Html.Serialize("registrationModel", SomeModel, SerializationMode.EncryptedAndSigned)
您可以使用:

[HttpPost]
public ActionResult Index([Deserialize(SerializationMode.EncryptedAndSigned)] RegistrationViewModel registrationModel)
{
    ...
}
或者,如果您更喜欢体力劳动:

var registrationModel = (RegistrationViewModel) new MvcSerializer()
    .Deserialize(serializedObject, SerializationMode.EncryptedAndSigned);

我正在手动进行反序列化,因为它不是一个参数,但我从OnActionExecuting方法中的Request.Form获取要反序列化的对象。我在Serialize调用中没有获得IntelliSense。我不知道具有SerializationMode的变体。但是,即使我将设置为相同的值,也会收到相同的错误消息。我将在上面的问题的更新中发布一些代码。如果你能看到哪里出了问题,我将不胜感激。在更改之后,即使我得到了相同的异常,我现在也得到了一个内部异常,表示属性不能为null。因此,这可能只是因为现在反序列化的实际对象存在问题。那我就可以自己解决剩下的问题了。非常感谢你的帮助。
var registrationModel = (RegistrationViewModel) new MvcSerializer()
    .Deserialize(serializedObject, SerializationMode.EncryptedAndSigned);