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

我有以下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 } 

如何使用Newtonsoft JSON.NET在C#中完成?

有两种基本方法,

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

要么

  • 将JSON反序列化为强类型对象, 而不使用其他属性。 将以静默方式删除C#类型中不存在的属性。 然后序列化刚刚反序列化的对象。

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

例如:

 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(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(); ;