0

私はhtmlにツリービュー構造を持っています。ノードとサブノードのみが含まれます。別のサブレベルを持つことはできません。このツリービューの機能の 1 つは、ユーザーがノードとサブノードを再配置できることです。

ユーザーがそれを保存すると、JSON オブジェクトが私の c# ページに送信され、サーバーで新しい注文が読み取られて保存されます。順序は、JSON オブジェクト内のオブジェクトの順序によって決まります。

JSON オブジェクトは次のようになります (例)。

[ {id: 4, items: [5, 6, 7]}, {id: 8, items: [9, 10, 11, 12, ...]}, ... ]

したがって、辞書の配列になります。ディクショナリごとに 2 つのキーがありidます。 はノードの ID 番号で、itemsはサブノードの ID の配列です。

順序が配列に追加する順序と同じであることが重要です。これにより、それらを反復処理するときに、それらを挿入したときと同じ順序のままになります。辞書のようなものである場合、これは当てはまりません。

jqueryを使用して、この辞書の配列を作成できると確信しています。しかし、これを JSON オブジェクトに変換するにはどうすればよいでしょうか? これは可能ですか?

そしてC#では、どうすればこれを読むことができますか?

4

3 に答える 3

3

_ 本当に問題がわかりません。jQuery を使用している場合は、Javascript を使用しています。JSON オブジェクトJavascript オブジェクトであるため、jQuery では次のように記述できます。オブジェクトを文字列にシリアライズします。

var data = [ {id: 4, items: [5, 6, 7]}, {id: 8, items: [9, 10, 11, 12, ...]}, ... ];
$.post({ 
     data: data,
     // ...
}); 

文字列が必要な場合、 JSON.Stringify() はオブジェクトを文字列に変換します。(私はそれが Javascript にネイティブであることを知りませんでした)。私はいつも jQuery ajax を使ってきたので、これまでに一度もしたことはありませんでした。

于 2013-06-27T00:34:50.163 に答える
1

このデータを C# で解析する簡単な方法は、JSON.Net などのライブラリを使用することです。実際の C# クラスにこの JSON 構造を実際にミラーリングする必要なく、json 文字列を解析してこれをトラバースできますが、これは大量の Json で役立つ場合があります。

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

static void Main(string[] args)
{
    string json = "{ items: [ {id: 4, items: [5, 6, 7]}, 
          {id: 8, items: [9, 10, 11, 12]}, {id: 5, items: [9, 10, 11, 12]} ] }";

    JToken root = JToken.Parse(json);
    JToken items = root["items"];

    var results = from element in items
                  select new
                  {
                     Id = element["id"].Value<int>(),
                     Items = element["items"].Select(x => x.Value<int>())
                  };

    foreach (var r in results)
    {
        Console.WriteLine("Id: {0}, Items: {1}", r.Id, string.Join(", ", r.Items));
    }
}

コンソールへの出力:

Id: 4, Items: 5, 6, 7
Id: 8, Items: 9, 10, 11, 12
Id: 5, Items: 9, 10, 11, 12

私が好んで使用するもう 1 つの便利なユーティリティはJson2C#です。しかし、私が提供した例は、HTTP Post リクエストを送信した後にデータを取得するための軽量で高速なアプローチを示しています。

于 2013-06-27T01:12:47.123 に答える
1

名前空間

System.Web.Script.Serialization;

質問1

しかし、これを JSON オブジェクトに変換するにはどうすればよいでしょうか? これは可能ですか?

答え

JavaScriptSerializer jss = new JavaScriptSerializer();
var jsonObjList = jss .Serialize(objList);

質問2

そしてC#では、どうすればこれを読むことができますか?

答え

モデル

public class Object1
{
  public int id {get; set;}
  public List<int> items {get; set;}
}

論理

string jsonData = @"[ {id: 4, items: [5, 6, 7]}, {id: 8, items: [9, 10, 11, 12, ...]}, ... ]";

JavaScriptSerializer jss = new JavaScriptSerializer();
var objList = jss.Deserialize<List<Object1 >>(jsonData);
于 2013-06-27T03:23:27.427 に答える