使用newtonsoft从Json字符串中删除属性

本文关键字:删除 属性 字符串 Json newtonsoft 使用 | 更新日期: 2023-09-27 18:09:16

我有以下JSON字符串:

{  
   "results":[  
      {  
         "id":11,
         "name":"Employee A",
         "isEmployee":true
      },
      {
         "id":12,
         "name":"Employee B",
         "isEmployee":true
      },
      {
         "id":13,
         "name":"Employee C",
         "isEmployee":true
      },
      {
         "id":14,
         "name":"Contractor A",
         "isEmployee":false
      },
      {
         "id":15,
         "name":"Contractor B",
         "isEmployee":false
      }
   ],
   "totalItems":5
}

我需要从它删除id和isEmployee属性,只留下name属性。

下面是期望的结果:
{  
   "results":[  
      {  
         "name":"Employee A"
      },
      {  
         "name":"Employee B"
      },
      {  
         "name":"Employee C"
      },
      {  
         "name":"Contractor A"
      },
      {  
         "name":"Contractor B"
      }
   ],
   "totalItems":5
}

如何在c#中使用Newtonsoft JSON.NET实现?

使用newtonsoft从Json字符串中删除属性

有一个Remove方法存在(不确定是否在这个问题的时候)

例如:

var raw = "your json text";
var o = (Newtonsoft.Json.Linq.JObject)JsonConvert.DeserializeObject(raw);
o.Property("totalItems").Remove()
return o.ToString();

或者输入

var parent = JsonConvert.DeserializeObject<JObject>(raw);
((JArray)parent.Property("results").Value)
    .Select(jo => (JObject)jo)
    .ToList()
    .ForEach(x => 
        x
            .Properties()
            .ToList()
            .ForEach(p =>
            {
                if (p.Name != "name")
                    p.Remove();
            }))
    //.Dump();
    ;

有两种基本方法,

  • 解析它到一个jobobject(例如JObject.Parse(json));通过在遍历时更新嵌套的对象来修改对象图;序列化现在表示修改后的对象图的原始jobobject。

  • 将JSON反序列化为强类型对象,不带附加属性。c#类型中不存在的属性将被静默删除。然后序列化刚刚反序列化的对象。