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