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# から JSON 化されたデータを返す方法があることは知っています (Brind の本では、168 ~ 170 ページにその方法が示されています)。おそらく最も賢明な方法は (混乱を最小限に抑える)、単純に json データを含む .js ファイルを次のように呼び出すことです。

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

そして、(私にとって) Json ファイルを作成する最も簡単な方法は? 最初に、 http://www.convertcsv.com/csv-to-json.htmなどの CSV2Json コンバーターを使用して csv ファイルを作成します。

次に、もちろん、.each(data) を使用して json レコードをループし、「持っています」。

4

1 に答える 1

1

.cshtml ファイルについて話しているので、MVC フレームワークを使用していると思います。その場合は、次のようにコントローラーでメソッドを作成します。

[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

そして、かみそりブロックでメソッドを呼び出して変数を設定し、かみそりを使用してループします。

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

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

Web ページの専門家ではありませんが、これでうまくいくと思います。

幸運を!

于 2013-06-18T22:07:37.723 に答える