例如,我在C#中有一个像这样的json:
我想通过值从
我尝试了一些Json.NET的方法,但是无法做到。 请注意,整个JSON结构是动态的。我唯一知道的是这种情况下的字段名称(GUID)和字段中应该被删除的值。
我尝试按照question中描述的方式进行操作, 但他们使用的是json的硬编码路径。这不是我的情况。
我使用了以下代码:
但是我收到了以下错误信息:
“集合已被修改;枚举操作可能无法执行”
可能是因为我试图删除父元素。
{
"Harry.firstName": "Harry",
"Harry.lastName": "Birimirski",
"Harry.recordTitle": "My title",
"Harry.SomeRepeatable": [{
"GUID": "9dd8c7bb-64e1-452b-90d5-db2b6e505492",
"NestedRepetable": [{
"GUID": "05aa2161-fcc2-45a6-b0b7-8749d94a2e61",
"nestedText": "Nested first"
},
{
"GUID": "dfd67eeb-703b-4cc4-9321-b6a39084e687",
"nestedText": "Nested first 2"
}
],
"name": "First"
},
{
"GUID": "3318e544-1be8-4795-9bab-fa05de79cf46",
"NestedRepetable": [{
"GUID": "c1b60869-7c75-4af4-8037-be26aeca7939",
"nestedText": "Nested second"
}],
"name": "Second"
}
]
}
我想通过值从
NestedRepetable
数组中删除项目。例如,删除包含 GUID:05aa2161-fcc2-45a6-b0b7-8749d94a2e61
的元素,期望的结果将如下所示:{
"Harry.firstName": "Harry",
"Harry.lastName": "Birimirski",
"Harry.recordTitle": "My title",
"Harry.SomeRepeatable": [{
"GUID": "9dd8c7bb-64e1-452b-90d5-db2b6e505492",
"NestedRepetable": [
{
"GUID": "dfd67eeb-703b-4cc4-9321-b6a39084e687",
"nestedText": "Nested first 2"
}
],
"name": "First"
},
{
"GUID": "3318e544-1be8-4795-9bab-fa05de79cf46",
"NestedRepetable": [{
"GUID": "c1b60869-7c75-4af4-8037-be26aeca7939",
"nestedText": "Nested second"
}],
"name": "Second"
}
]
}
我尝试了一些Json.NET的方法,但是无法做到。 请注意,整个JSON结构是动态的。我唯一知道的是这种情况下的字段名称(GUID)和字段中应该被删除的值。
我尝试按照question中描述的方式进行操作, 但他们使用的是json的硬编码路径。这不是我的情况。
我使用了以下代码:
private JToken RemoveFields(JToken token, string fieldValue)
{
JContainer container = token as JContainer;
if (container == null)
{
return token;
}
List<JToken> removeList = new List<JToken>();
foreach (JToken el in container.Children())
{
JProperty p = el as JProperty;
if (p != null)// && fields.Contains(p.Name))
{
if (p.Value.ToString() == fieldValue)
{
removeList.Add(el);
//try to remove the whole thing, not only GUID field ..
//removeList.Add(el.Parent);
}
}
RemoveFields(el, fieldValue);
}
foreach (JToken el in removeList)
{
el.Parent.Remove();
return token;
}
return token;
}
但是我收到了以下错误信息:
“集合已被修改;枚举操作可能无法执行”
可能是因为我试图删除父元素。
ToList()
添加到你的removeList
迭代中了吗?这样就足够了吗? - ColinM