C# 使用嵌套属性 [duplicate] 从 JSON 中删除对象

C# Remove object from JSON with nested property [duplicate]

提问人:user1018379 提问时间:11/17/2023 更新时间:11/17/2023 访问量:39

问:

我有这个JSON,我想删除带有所有嵌套属性的“delta”部分。我已经使用JObject.Remove(“delta”),但是我有这个错误:

无法在 Newtonsoft.Json.Linq.JProperty 中添加或删除项

JSON格式

{
  "state": {
    "desired": {
      "optionals": {
        "Variant": "XXXX",
        "Vehicle": {
          "COC00": "AAAA",
          "D0000": "BBBB",
          "D0600": "CCCC"
        }
      }
    },
    "delta": {
      "optionals": {
        "Variant": "XXXX",
        "Vehicle": {
          "COC00": "AAAA",
          "D0000": "BBBB",
          "D0600": "CCCC"
          "D2000": "DDDD",
        }
      }
    }
  },
  "timestamp": 1700154568
}
C# json.net

评论

0赞 Jawad 11/17/2023
这回答了你的问题吗?在 C# 中动态地从 JSON 中删除节点,或者也许是这样?JSON.NET 如何删除节点
0赞 Hamlet Hakobyan 11/17/2023
上述解决方案很冗长,但性能很高。如果这不是瓶颈,您可以将此 json 反序列化为具有所需形状的对象,然后将其序列化为 json。
0赞 Alberto Chiesa 11/17/2023
我认为您在错误的对象上调用了 Remove。该消息指出您正在对 JProperty 的实例调用 Remove。我希望您使用 JToken 作为接口,但您可能正在调用 .但是您需要调用类似的东西(我不确定确切的 API)stateProperty.Remove("delta")stateProperty.Value.Remove("delta")

答:

1赞 Pavan Chandaka 11/17/2023 #1

使用 selectToken,然后删除该属性。

    JObject jo = JObject.Parse(json);
    JObject header = (JObject)jo.SelectToken("state");
    header.Property("delta").Remove();
    json = jo.ToString();