JSON.NET how to remove nodes

c#, json, json.net, jsonpath

Solution

I just ended up deserializing to JObject and recursively looping through that to remove unwanted fields. Here's the function for those interested.

private void removeFields(JToken token, string[] fields)
{
    JContainer container = token as JContainer;
    if (container == null) return;

    List<JToken> removeList = new List<JToken>();
    foreach (JToken el in container.Children())
    {
        JProperty p = el as JProperty;
        if (p != null && fields.Contains(p.Name))
        {
            removeList.Add(el);
        }
        removeFields(el, fields);
    }

    foreach (JToken el in removeList)
    {
        el.Remove();
    }
}

Problem

I have a json like the following: ``` { "d": { "results": [ { "__metadata": { }, "prop1": "value1", "prop2": "value2", "__some": "value" }, { "__metadata": { }, "prop3": "value1", "prop4": "value2", "__some": "value" }, ] } } ``` I just want to transform this JSON into a different JSON. I want to strip out the "_metadata" and "_some" nodes from the JSON. I'm using JSON.NET.

Original source