在mvc视图中反序列化Json

时间:2014-01-09 11:43:08

标签: javascript json asp.net-mvc-4

在控制器中我有

 public JsonResult Index()
{
    List<TutorialModel> models = new List<TutorialModel>();
    model.TitleWord = "Go";
    model.Colors = new List<bool>();
    model.Colors.Add(true);
    model.Colors.Add(false);
    model.Colors.Add(false);
    model.Colors.Add(false);
    model.PossibleAnswers = new List<string>();
    model.PossibleAnswers.Add("1");
    model.PossibleAnswers.Add("2");
    model.PossibleAnswers.Add("3");
    model.PossibleAnswers.Add("4");

    string ser = (new System.Web.Script.Serialization.JavaScriptSerializer()).Serialize(model);

    return Json(ser, JsonRequestBehavior.AllowGet);
}

当我在视野中尝试用

捕捉这个Json结果时
<script>
    var values = json.parse(@Model)
</script>

浏览器显示我的序列化字符串。我如何反序列化这个json元素并存储在一些变量中。

我对此控制器的模型:

public class TutorialModel
{
    public string TitleWord { get; set; }

    public List<string> PossibleAnswers { get; set; }

    public List<bool> Colors { get; set; }

}

2 个答案:

答案 0 :(得分:2)

请注意,在您的Controller中,您不需要返回JsonResult - 除非您将其称为ajax方法或其他内容。在这种情况下,请尝试正常返回ActionResult(或ViewResult)。你可以这样做:

public ActionResult Index()
{
    List<TutorialModel> models = new List<TutorialModel>();
    //...add items to list

    return View(models);
}

然后在你的cshtml javascript中:

<script>
    var model = @(Html.Raw(Json.Encode(Model)));
<script>

答案 1 :(得分:0)

问题是你要返回一个JsonResult,所以所有发送到浏览器的都是你的JSON,而不是你想要的视图。

您需要返回一个ViewResult:

public ViewResult Index()
{
    List<TutorialModel> models = new List<TutorialModel>();
    model.TitleWord = "Go";
    model.Colors = new List<bool>();
    model.Colors.Add(true);
    model.Colors.Add(false);
    model.Colors.Add(false);
    model.Colors.Add(false);
    model.PossibleAnswers = new List<string>();
    model.PossibleAnswers.Add("1");
    model.PossibleAnswers.Add("2");
    model.PossibleAnswers.Add("3");
    model.PossibleAnswers.Add("4");

    string ser = (new System.Web.Script.Serialization.JavaScriptSerializer()).Serialize(model);

    return View("Index", ser);
}

然后在您的视图中,您可以:

<script>
   var values = JSON.parse("@Model")
</script>