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