You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

当前ASP.NET MVC中@Html.Serialize和[Deserialize]的替代方案是什么?

ASP.NET MVC 5 中@Html.Serialize与[Deserialize]的替代方案

由于Microsoft.AspNet.Mvc.Futures包已停止维护,你可以通过以下几种方案替代原有序列化/反序列化逻辑:

方案一:手动JSON序列化与反序列化

这是最直接的替代方式,利用成熟的JSON序列化库实现:

  1. 视图层序列化:用JsonConvert将对象序列化为字符串,存入隐藏字段
@Html.Hidden("SerializedData", Newtonsoft.Json.JsonConvert.SerializeObject(YourModel))
  1. 控制器层反序列化:接收字符串参数后手动反序列化为目标类型
[HttpPost]
public ActionResult YourAction(string SerializedData)
{
    var targetModel = Newtonsoft.Json.JsonConvert.DeserializeObject<YourModelType>(SerializedData);
    // 业务逻辑处理
}

注:Newtonsoft.Json是MVC 5项目的常用依赖,若未引用可通过NuGet安装。

方案二:使用MVC内置模型绑定

如果无需隐藏完整对象结构,可直接利用MVC原生的模型绑定能力:

  • 在视图中为模型的每个属性生成对应表单字段(如@Html.EditorFor(m => m.PropertyName)或@Html.EditorForModel())
  • POST请求时,控制器Action直接接收模型类型参数,MVC会自动完成参数绑定:
[HttpPost]
public ActionResult YourAction(YourModelType model)
{
    // 业务逻辑处理
}

此方案更符合MVC的原生设计,但不适用于需要隐藏敏感属性或传递复杂嵌套对象的场景。

方案三:自定义扩展模拟原有Futures功能

若想尽量保留原有代码结构,可自定义HtmlHelper扩展和ActionFilter来模拟原特性:

  1. 自定义Serialize扩展方法
public static class HtmlSerializeExtensions
{
    public static MvcHtmlString Serialize(this HtmlHelper htmlHelper, string name, object value)
    {
        var serializedValue = Newtonsoft.Json.JsonConvert.SerializeObject(value);
        return htmlHelper.Hidden(name, serializedValue);
    }
}
  1. 自定义Deserialize特性
public class DeserializeAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        foreach (var param in filterContext.ActionDescriptor.GetParameters())
        {
            var formKey = param.ParameterName;
            if (filterContext.HttpContext.Request.Form.ContainsKey(formKey))
            {
                var serializedStr = filterContext.HttpContext.Request.Form[formKey];
                var deserializedObj = Newtonsoft.Json.JsonConvert.DeserializeObject(serializedStr, param.ParameterType);
                filterContext.ActionParameters[param.ParameterName] = deserializedObj;
            }
        }
        base.OnActionExecuting(filterContext);
    }
}
  1. 使用方式与原有逻辑一致
    视图中仍用@Html.Serialize("model", YourModel),控制器Action添加[Deserialize]特性即可:
[HttpPost]
[Deserialize]
public ActionResult YourAction(YourModelType model)
{
    // 业务逻辑处理
}

迁移至ASP.NET Core的适配提示

后续迁移到Core时,可将上述方案中的Newtonsoft.Json替换为Core内置的System.Text.Json,或直接利用Core更强的模型绑定能力,无需依赖第三方扩展。

内容的提问来源于stack exchange,提问作者Wout

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 22:58:24