3

我在 menu.json 文件中保存了以下 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; }
}

并创建一个包含 MenuItem 列表的新 Menu 类:

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

看看这是否有效。

于 2012-11-28T16:32:12.023 回答
0

这里有一些序列化的例子http://james.newtonking.com/pages/json-net.aspx使用 JSON.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 回答