Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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# 通过Linq使用Json.Net查找节点以插入或删除子节点_C#_Json_Linq_Json.net - Fatal编程技术网

C# 通过Linq使用Json.Net查找节点以插入或删除子节点

C# 通过Linq使用Json.Net查找节点以插入或删除子节点,c#,json,linq,json.net,C#,Json,Linq,Json.net,我对Json数据有这种格式: { "Name": "MainMenu", "Text": "", "Guid": "047bf56e75f44c14b56a4b84f3af6dbe", "ParentGuid": "00000000000000000000000000000000" "MenuEntries": [{ "Name": "Home", "Text": "Home", "G

我对Json数据有这种格式:

{
    "Name": "MainMenu",
    "Text": "",
    "Guid": "047bf56e75f44c14b56a4b84f3af6dbe",
    "ParentGuid": "00000000000000000000000000000000"
    "MenuEntries": [{
            "Name": "Home",
            "Text": "Home",
            "Guid": "1e3df5fb3d8e463b8f37e8ccdb291802",
            "ParentGuid": "047bf56e75f44c14b56a4b84f3af6dbe",
            "MenuEntries": [{
                    "Name": "About",
                    "Text": "About",
                    "Guid": "f476a3444e2943668d86433f4c88374c",
                    "ParentGuid": "1e3df5fb3d8e463b8f37e8ccdb291802",
                    "MenuEntries": []
                }, {
                    "Name": "Contact",
                    "Text": "Contact Us",
                    "Guid": "51b461ec6abd4aecb95cf662e8e15ae6",
                    "ParentGuid": "1e3df5fb3d8e463b8f37e8ccdb291802",
                    "MenuEntries": []
                }
            ]
        }, {
            "Name": "About",
            "Text": "About",
            "Guid": "6954d6f747ef4d2dae33de0f0efae9cc",
            "ParentGuid": "047bf56e75f44c14b56a4b84f3af6dbe",
            "MenuEntries": []
        }, {
            "Name": "Contact",
            "Text": "Contact Us",
            "Guid": "634cfb99b70b4395b94061ae4f082aba",
            "ParentGuid": "047bf56e75f44c14b56a4b84f3af6dbe",
            "MenuEntries": []
        }
    ]
}
如何使用用于筛选的“Guid”字段通过Linq查找特定节点


另外,如何在所选节点中添加子节点(“菜单项”)并删除此节点?

您可以创建一个模型:

    public class MenuEntry
    {
        public string Name { get; set; }
        public string Text { get; set; }
        public string Guid { get; set; }
        public string ParentGuid { get; set; }
        public List<object> MenuEntries { get; set; }
    }

    public class RootObject
    {
        public string Name { get; set; }
        public string Text { get; set; }
        public string Guid { get; set; }
        public string ParentGuid { get; set; }
        public List<MenuEntry> MenuEntries { get; set; }
    }

到目前为止你试过什么?您是否使用了Json.NetI将字符串解析为JObject,并尝试使用“Where”扩展名,但无法确定如何使用它。我尝试了此路径,但由于某种原因,搜索的节点没有作为引用返回,而是作为该节点的新副本返回。这可能适用于RootObject的子级。我已经尝试使用某种递归函数来检查子节点的菜单项,但是获取的节点不是作为引用返回的,而是新的副本。
string jsonString = System.IO.File.ReadAllText(Server.MapPath("~/json/test.json"));
RootObject Menu = JsonConvert.DeserializeObject<RootObject>(jsonString);
foreach (var item in Menu.MenuEntries)
    {
        if (item.Guid == "1e3df5fb3d8e463b8f37e8ccdb291802")
            {
               Console.WriteLine(item.Name);
               //=> Home
            }
    }