Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何读取json文件并在自定义类中序列化它?_C#_Json_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack_File Handling - Fatal编程技术网 servicestack,file-handling,C#,Json,servicestack,File Handling" /> servicestack,file-handling,C#,Json,servicestack,File Handling" />

C# 如何读取json文件并在自定义类中序列化它?

C# 如何读取json文件并在自定义类中序列化它?,c#,json,servicestack,file-handling,C#,Json,servicestack,File Handling,我在menu.JSON文件中保存了以下JSON: { "menu": { "menuitems": [ { "label": "Account", "listview": "Account List" },

我在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);

       }

我认为您需要将菜单类重命名为MenuItem:

public class MenuItem
{
   public string Label { get; set; }
   public string Listview { get; set; }
}
并创建一个包含菜单项列表的新菜单类:

public class Menu
{
    public List<MenuItem> MenuItems { get; set; }
}
公共类菜单
{
公共列表菜单项{get;set;}
}

看看这是否有效。

这里有一些使用JSON.Net的序列化示例

您的类结构应该与以下类似

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

public class MenuItem
{
       public string Label {get;set;}
       public string Listview {get;set;}
}
公共类菜单
{
公共列表菜单项{get;set;}
}
公共类菜单项
{
公共字符串标签{get;set;}
公共字符串Listview{get;set;}
}

序列化在菜单上方有一个额外的未命名容器。您的类结构需要如下所示:

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);
JavaScriptSerializer js=新的JavaScriptSerializer();
StreamReader sr=newstreamreader(“menu.json”);
string filedata=sr.ReadToEnd();
var menus=js.Deserialize(filedata);
JavaScriptSerializer js = new JavaScriptSerializer();
StreamReader sr = new StreamReader("menu.json");
string filedata = sr.ReadToEnd();
var menus = js.Deserialize<container>(filedata);