我更容易在 .cshtml 文件中创建我的站点使用的数据,该文件实例化一个类的 N 个对象(而不是创建一个 .json 文件)。在之前创建原始 json 文件之后,我最近才更改为这种方法。
读取数据的代码,无论是 .json 还是 .cshtml,都是一样的:
$.getJSON('Content/noba.json', function (data) {
$.each(data, function (i, dataPoint) {
. . .
$.getJSON('getHugos.cshtml', function (data) {
$.each(data, function (i, dataPoint) {
. . .
据推测,读取原始 json,如下所示:
. . .
{
"category":"Outdoor Literature",
"title":"Almost Somewhere: Twenty-Eight Days on the John Muir Trail",
"author":"Suzanne Roberts",
"kindle":"B008SAOT4C",
"hardbound":"--",
"paperback":"0803240120",
"imghref":"http://www.amazon.com/exec/obidos/ASIN/B008SAOT4C/garrphotgall-20\" target=\"_blank\" ><img height=\"180\" width=\"120\" src=\"http://images.amazon.com/images/P/B008SAOT4C.01.MZZZZZZZ.jpg\" alt=\"Suzanne Roberts Book Cover\" /></a>"
},
. . .
...会比这种事情更高效:
@{
var books = new List<BookClass>
{
new BookClass{Year=2013, YearDisplay="blankYearDisplay", Category="2013", Title="blankTitle", Author="blankAuthor", KindleASIN="blankKindleASIN", HardboundASIN="blankHardboundASIN", PaperbackASIN="blankPaperbackASIN", ImgSrc="blankImgSrc"},
. . .
new BookClass{Year=2001, YearDisplay="2001", Category="Best Novella", Title="The Ultimate Earth", Author="Jack Williamson", KindleASIN="B00DV8TSHO", HardboundASIN="--", PaperbackASIN="1612421547", ImgSrc="http://images.amazon.com/images/P/B00DV8TSHO.01.MZZZZZZZ"}
};
Response.ContentType = "application/json";
Json.Write(books, Response.Output);
}
...必须通过 ASP.NET 进行额外的步骤才能转换为:
[...,{"Year":2013,"YearDisplay":"2013","Category":"Best Novel","Title":"Redshirts","Author":"John Scalzi","KindleASIN":"B0079XPUOW","HardboundASIN":"0765316994","PaperbackASIN":"0765334798","ImgSrc":"http://images.amazon.com/images/P/B0079XPUOW.01.MZZZZZZZ"},...]
...但众所周知,假设事情有时会给我们带来麻烦。
我知道你在想什么——只要测试一下就知道了;但是我还没有创建足够多的 cshtml 记录来比较这两种方法,但是想知道是否有人知道加载原始 json 文件的速度是否比将 C# 类转换为 json 数据快得多?如果是这样,我可能不得不恢复我以前的方法......
更新
您可以自己检查(www.awardwinnersonly.com),但根据我的观察,两个大小大致相同的列表(书籍>国家户外图书奖和书籍>雨果(科幻小说),第一个访问原始 json 文件和另一个将 C#/Razor 类转换为 json,以相同的速度加载(我没有使用秒表之类的,但我正在寻找更多只是一般感觉更快)。我的下一个类别(Spur 奖),我将加载一个 htm 文件,而不是做任何后端装配线的东西,然后看看。
如果有的话,cshtml文件比NOBA json文件快;它甚至比 Music > CMA json 文件还要快,后者的项目要少得多。我不知道为什么会这样,除非 Razor 引擎针对此类操作进行了超优化。
更新 2
直到现在我才想到它,但这是使用 jsonified 的 C# 类而不是直接访问 json 文件的一个优势——我可以(大概我还没有尝试过)在那个 C# 代码中放置一个断点是当它被 $.getJSON('getHugos.cshtml') 调用时,单步执行它