0

我在http://james.newtonking.com/projects/json/help/的“序列化和反序列化 Json | 序列化集合”中看到了这个代码示例:

Product p1 = new Product
{
  Name = "Product 1",
  Price = 99.95m,
  ExpiryDate = new DateTime(2000, 12, 29, 0, 0, 0, DateTimeKind.Utc),
};
Product p2 = new Product
{
  Name = "Product 2",
  Price = 12.50m,
  ExpiryDate = new DateTime(2009, 7, 31, 0, 0, 0, DateTimeKind.Utc),
};

List<Product> products = new List<Product>();
products.Add(p1);
products.Add(p2);

string json = JsonConvert.SerializeObject(products, Formatting.Indented);
//[
//  {
//    "Name": "Product 1",
//    "ExpiryDate": "2000-12-29T00:00Z",
//    "Price": 99.95,
//    "Sizes": null
//  },
//  {
//    "Name": "Product 2",
//    "ExpiryDate": "2009-07-31T00:00Z",
//    "Price": 12.50,
//    "Sizes": null
//  }
//]

到现在为止还挺好; 但是如何从 jQuery 中检索这个输出呢?是否有可能有一个名为 JsonizedProducts.cshtml 的文件:

@{
    return GetProductsAsJson(); // returns the string named "json" above
}

...并使用 jQuery,例如(伪代码):

$.getJson('\JsonizedProducts') {
    // loop through the json, building html with injected product values
}

? 或者...?

更新

我找到了很多执行此操作所需的客户端 jQuery 代码示例;这是我缺少的服务器端方面。如果我用 .getJSON("\Bla\Blee.js", someVal, someFunc) 之类的方法调用 .getJson(path, data, callback),Blee.js 将如何传回 JSON 数据?被称为 diesbzg 的文件的责任是什么?

更新 2

这是我能做到的/一种方式吗(getPlatypus() 和 getWombat() 是其他类中返回 List<> 的方法):

// This code is in the file that .getJson() calls; the data (args) .getJson calls has "mammalRequested" Using the Web.Helpers Json helper
string jsonResult;
if (mammalRequested == "Platypus") {
    jsonResult = Json.Encode(getPlatypus); 
}
else if (mammalRequested == "Wombat") {
    jsonResult = Json.Encode(getWombat); 
}
Response.Write(jsonResult);

?

更新 3

这不是我的问题的答案,因为我提到了 Json.NET,但这很可能是最好的解决方案:我知道有一种方法可以从 C# 传回 jsonized 数据(Brind 的书在第 168-170 页显示了如何),但是可能最明智的(最少的麻烦和大惊小怪)是简单地调用一个包含 json 数据的 .js 文件,如下所示:

$.getJson('someFile.js', 'someArg', someCallbackFunction);

(对我来说)创建 Json 文件的最简单方法是什么?首先,创建一个 csv 文件,而不是使用 CSV2Json 转换器,例如来自http://www.convertcsv.com/csv-to-json.htm

然后,当然,使用 .each(data) 循环遍历 json 记录并“拥有它们”。

4

1 回答 1

1

我猜您正在使用 MVC 框架,因为您在谈论 .cshtml 文件。如果是这样,请在您的控制器中创建一个方法,如下所示:

[HttpGet]
public JsonResult GetProductsAsJson()
{
    List<Product> products = repository.GetProducts(); //or whatever code generates the list
    return Json(products, JsonRequestBehaviour.AllowGet);
}

然后在你的javascript中,做你上面所做的!url 将像往常一样是方法名称和控制器名称。如果您将 javascript 放在 .chstml 页面中,您可以使用 Url.Action("GetProductsAsJson", "MyController') 来呈现方法的 url。

编辑:

好的,根据评论,试试这个:

在项目的 .cs 文件中创建命名空间和类:

namespace MyThings
{
    public class DbRepository
    { 
         public static string GetProductsJSON()
         {
               //code to create json string
               return json;
         }
    }
}

然后在您的 .cshtml 文件中,在页面顶部添加 using 指令:

@using MyThings

并在 razor 块中调用该方法设置变量,然后使用 razor 循环:

@{ 
    List<Products> prods = DbRepository.GetProductsJSON();
 }

 <ul>
     @foreach (var prod in prods)
      {
           <li>@prod.Name</li>
      }
 </ul>

不是网页专家,但我认为这会奏效。

祝你好运!

于 2013-06-18T22:07:37.723 回答