Удалить свойства из строки Json с помощью newtonsoft
У меня есть следующая строка 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?
Ответы
Ответ 1
Существуют два основных подхода:
Либо
- Разделите его на JObject (например,
JObject.Parse(json)
); изменить граф объектов, обновив вложенные объекты JObject при перемещении; сериализуйте исходный JObject, который теперь представляет измененный граф объектов.
или
- Дезертициализация JSON для сильно типизированных объектов без дополнительных свойств. Свойства, которые не присутствуют в типах С#, будут отключены. Затем сериализовался только десериализованный объект.
Ответ 2
существует метод 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();
;