在 C# 中,我通过 Controller 执行此操作:
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)
这里还应该/可以做哪些其他事情?
最佳答案
不必创建一个模型来保存 JSON 字符串,只需将纯 .NET 对象传递到您的 View ,然后将其序列化为 JSON:
在你的 Controller 中:
public ActionResult GetCompanies()
{
return View(_repository.All<Comapny>());
}
那么在你看来:
<script>
var companies = @Html.Raw(JsonConvert.SerializeObject(Model));
</script>
如果您希望/需要 View 中的强类型模型,则应将您的 CompanyViewModel
更改为:
public class CompanyViewModel
{
public IList<Company> Companies {get; set;}
//Or whatever sort of collection your repository returns
}
在你的 Controller 中
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>
关于c# - JSON.NET 反序列化客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24437750/