3

次の JSON が menu.json ファイルに保存されています。

       {
          "menu": {
                    "menuitems": [
                     {
                          "label": "Account",
                          "listview": "Account List"
                      },
                      {
                          "label": "Documents",
                          "listview": "Document List"
                      }
                                ]
                  }
       }

このデータを手動でファイルに書き込みました。次の関数を使用してこのデータを取得します。

        public ActionResult GetFromFile(string path)// path points to the menu.json file
       {
          StreamReader sr = new StreamReader(path);
          string filedata = sr.ReadToEnd();
          Menu menu = JsonSerializer.DeserializeToString<Menu>(filedata);
          return Json(menu, JsonRequestBehavior.Allowget);

       }

menu として応答を取得すると、クラス フィールドで区切られません。さらに、私は単一のクラスを持っているので、jsonファイルデータをこのクラスに保存するにはどうすればよいですか?? クラス構造に変更はありますか? 私のメニュークラスは次のとおりです。

    public class Menu

    {
       public string Label {get;set;}
       public string Listview {get;set;}
   }
4

4 に答える 4

1

シリアル化には、メニューの上に追加の名前のないコンテナーがあります。クラス構造は次のようにする必要があります。

public class container
{
    public menu menu { get; set; }
}

public class menu
{
    public menuitem[] menuitems { get; set; }
}

public class menuitem
{
    public string Label { get; set; }
    public string Listview { get; set; }
}

逆シリアル化するには、次を使用できます。

JavaScriptSerializer js = new JavaScriptSerializer();
StreamReader sr = new StreamReader("menu.json");
string filedata = sr.ReadToEnd();
var menus = js.Deserialize<container>(filedata);
于 2012-11-28T16:38:49.770 に答える
0

Menuクラスの名前をMenuItemに変更する必要があると思います。

public class MenuItem
{
   public string Label { get; set; }
   public string Listview { get; set; }
}

そして、MenuItemsのリストを持つ新しいMenuクラスを作成します。

public class Menu
{
    public List<MenuItem> MenuItems { get; set; }
}

それが機能するかどうかを確認します。

于 2012-11-28T16:32:12.023 に答える
0

ここにシリアル化の例がいくつかありますhttp://james.newtonking.com/pages/json-net.aspxJSON.Netを使用

于 2012-11-28T16:32:52.837 に答える
0

クラス構造は次のようなものにする必要があります

public class Menu
    {
       public List<MenuItem> menuItems {get;set;}
   }

public class MenuItem
{
       public string Label {get;set;}
       public string Listview {get;set;}
}
于 2012-11-28T16:34:27.187 に答える