JSON.NET反序列化客户端

时间:2014-06-26 18:34:12

标签: c# javascript json knockout.js json.net

在C#中,我是从控制器执行此操作的:

public ActionResult GetCompanies()
{
    var vm = new CompanyViewModel { jsonData = JsonConvert.Serialize(_repository.All<Company>()) };

    return View(vm);
}

ViewModel看起来像这样:

public CompanyViewModel
{
    public string jsonData {get;set}
}

在客户端:

@model MyWebApp.ViewModels.CompanyViewModel

@Scripts.Render("~/bundles/knockout")
<script type="text/javascript">
   var serverData = <!-- Many Things To Do Here -->
</script>

<!-- Many Things To Do Here -->部分中,您可以执行一些操作将服务器数据放入JavaScript对象。

执行此操作的最佳方法是什么,因为我遇到JSON.parse与JSON.NET序列化的某些字符有关的问题。

只是将普通数据放在那里(它有效):var serverData = @Html.Raw(@Model.jsonData)

这里应该/可以做些什么?

1 个答案:

答案 0 :(得分:1)

不是仅仅为了保存JSON字符串而创建模型,只需将普通的.NET对象传递给视图,然后将其序列化为JSON:

在您的控制器中:

public ActionResult GetCompanies()
{
    return View(_repository.All<Comapny>());
}

然后在你看来:

<script>
    var companies = @Html.Raw(JsonConvert.SerializeObject(Model));
</script>

如果您希望/需要在视图中使用强类型模型,则应将CompanyViewModel更改为:

public class CompanyViewModel
{
    public IList<Company> Companies {get; set;}
    //Or whatever sort of collection your repository returns
}

在您的控制器中

public ActionResult GetCompanies()
{
    var vm = new CompanyViewModel { Companies = _repository.All<Company>() };
    return View(vm);
}

然后在你看来:

@model MyWebApp.ViewModels.CompanyViewModel
<script>
    var companies = @Html.Raw(JsonConvert.SerializeObject(Model.Companies));
</script>