Reputation: 393
I have the following JSON string:
{
"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
}
I need to remove from it the id and isEmployee properties and leave only the name property.
Here is the desired result:
{
"results":[
{
"name":"Employee A"
},
{
"name":"Employee B"
},
{
"name":"Employee C"
},
{
"name":"Contractor A"
},
{
"name":"Contractor B"
}
],
"totalItems":5
}
How can this be done in C# using Newtonsoft JSON.NET?
Upvotes: 39
Views: 69156
Reputation: 18746
there is a Remove method present (not sure if it was at the time of this question)
For example:
var raw = "your json text";
var o = (Newtonsoft.Json.Linq.JObject)JsonConvert.DeserializeObject(raw);
o.Property("totalItems").Remove()
return o.ToString();
or for your exact input
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();
;
Upvotes: 57
Reputation: 61975
There are two basic approaches,
Either
JObject.Parse(json)
); modify the object graph by updating the nested JObjects while traversing; serialize the original JObject which now represents the modified object graph.Or
Upvotes: 17