将MVC4模型转换为cshtml页面上的javascript json对象

1 javascript c# jquery asp.net-mvc-4

我在我的cshtml页面中有一个模型,我想将这个模型转换为json对象,这样我就可以在cshtml页面的javascript中使用这个json.我正在使用MVC4.

我怎么能这样做?

Tra*_*s J 6

.NET Fiddle

您正在寻找的是"序列化".MVC 4默认使用Json.NET.语法非常易于使用.要在视图模型中访问库,请使用

using Newtonsoft.Json;
Run Code Online (Sandbox Code Playgroud)

一旦你使用了它,序列化的语法是这样的:

string json = JsonConvert.SerializeObject(someObject);
Run Code Online (Sandbox Code Playgroud)

序列化字符串后,您可以在视图中使用json,如下所示:

var viewModel = @Html.Raw(json);
Run Code Online (Sandbox Code Playgroud)

这是一个更深入的例子:

Model.cs

public class SampleViewModel : AsSerializeable
{
    public string Name { get; set; }
    public List<NestedData> NestedData { get; set; }
    public SampleViewModel()
    {
        this.Name = "Serialization Demo";
        this.NestedData = Enumerable.Range(0,10).Select(i => new NestedData(i)).ToList();   
    }
}

public class NestedData
{
    public int Id { get; set; }
    public NestedData(int id)
    {
        this.Id = id;   
    }
}

public abstract class AsSerializeable
{
    public string ToJson()
    {
        return JsonConvert.SerializeObject(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

Controller.cs

public class HomeController : Controller
{
    [HttpGet]
    public ActionResult Index()
    {
        return View(new SampleViewModel());
    }
}    
Run Code Online (Sandbox Code Playgroud)

View.cshtml

    <body>
    <div>
        <h1 id="Name"></h1>
        <div id="Data"></div>
    </div>
</body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
    //Load serialized model
    var viewModel = @Html.Raw(Model.ToJson());

    //use view model
    $("#Name").text(viewModel.Name);

    var dataSection = $("#Data");
    $.each(viewModel.NestedData,function(){
        dataSection.append("<div>id: "+this.Id+"</div>");
    });
</script>
Run Code Online (Sandbox Code Playgroud)