38

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?

0

2 Answers 2

56

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();
    ;
2
  • 1
    Thank you this helped me, as I had a very specific node (top-level) to remove.
    – leeroya
    Commented Oct 18, 2021 at 12:34
  • If you don't have array in json then use JObject.Parse(json) Commented Nov 22, 2022 at 9:44
17

There are two basic approaches,

Either

Or

  • Deserialize the JSON to strongly-typed objects without the additional properties. The properties not present in the C# types will be silently dropped. Then serialized the just-deserialized object.
1
  • 1
    I used the 2nd method mentioned above (deserialize to C# object that mimics JSON structure, then serialize to JSON) and it worked great.
    – iCode
    Commented Feb 9, 2018 at 12:57

Not the answer you're looking for? Browse other questions tagged or ask your own question.