【问题标题】:Deserialize an MVC model not working反序列化 MVC 模型不起作用
【发布时间】:2013-06-16 00:05:09
【问题描述】:

我有这个模型,

[Serializable]
    public class userMaster
    {
        public Step1_userName userName  { get; set; }
        public Step2_userAddress userAddress { get; set; }
        public Step3_userContact  userContact { get; set; } 
    }

我像这样在我的视图中对其进行序列化,

@Html.Hidden("RegMod",Model.Serialize())

然后我将数据发布回控制器操作,

[HttpPost]
    public ActionResult Step1(Step1_userName userName, string RegMod)
    {
        var model = (userMaster)RegMod.Deserialize();
        model.userName = userName;

        if (!ModelState.IsValid)
        {
            return View(model);
        }
        return View("Step2", model);
    }

我确实在 RegMod 中获取了数据,但它不会反序列化回对象。我得到的只是一个空(null)对象。我还向这个对象添加了新数据,效果很好。

这里是序列化/反序列化类,

namespace MyMVCApplication
{
    public static class ExtensionMethods
    {

        public static string Serialize(this object o)
        {
            var sw = new StringWriter(); 
            var formatter =  new LosFormatter();
            formatter.Serialize(sw, o);

            return sw.ToString(); 
        }

        public static object Deserialize(this string data)
        {
            if(String.IsNullOrEmpty(data))
                return null; 

            var formatter = new LosFormatter();
            return formatter.Deserialize(data); 
        }
    }
}

有谁知道为什么它不反序列化,有没有更好的方法来做到这一点? 谢谢。

【问题讨论】:

  • 为什么要反序列化模型而不是为每个属性使用隐藏字段?
  • 是的,Step1_userName等都是可序列化的。
  • @developer10214 我需要隐藏隐藏字段中的数据。
  • @John - 如果您不希望客户看到数据,那么我建议您一开始不要将其发送给他们。
  • @John - 你能告诉我LosFormatter 是什么吗?

标签: c# asp.net-mvc asp.net-mvc-3 deserialization


【解决方案1】:

我将问题追溯到,

@Html.Hidden("RegMod",Model.Serialize())

隐藏的 RegMod 字段的值与序列化程序例程中的值不同。所以我尝试了这个,

<input type="hidden" value="@Model.Serialize()" name="RegMod" />

现在它可以工作了。

看起来 HTML 助手正在处理数据。

【讨论】:

  • 如果这是您的问题的解决方案,您可以将其标记为答案。
  • @HenkMollema 它不会让我再等 10 个小时。
猜你喜欢
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
  • 2012-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多