/// <summary> /// Removes all pathsToIgnore from the provided JToken /// </summary> /// <param name="jToken">Valid Json.NET JToken object</param> /// <param name="pathsToRemove">an array of valid JSON path expressions. /// Note: currently, the JSON Path union operator is supported for /// two indexes or property names</param> /// <returns>JToken with the ignored paths removed</returns> public static JToken ApplyFilter(JToken jToken, string[] pathsToRemove) { //convert the JSON to XML JsonToJxml jx = new JsonToJxml(); XmlDocument doc = jx.ConvertToJxml(JToken.Parse(jToken.ToString())); //NOTE: Json.NET deserializer does not preserve data types //XmlDocument doc = JsonConvert.DeserializeXmlNode(jToken.ToString(), "Root"); //get XPath equivalents for each JSON Path expression for (int i = 0; i < pathsToRemove.Length; i++) { pathsToRemove[i] = XPathFromJPath(pathsToRemove[i]); } //apply the filter doc = ApplyFilter(doc, pathsToRemove); //convert the XML back to JSON JxmlToJson xj = new JxmlToJson(); JToken result = xj.ConvertToJson(doc); //NOTE: Json.NET serializer does not restore data types //JToken result = JsonConvert.SerializeXmlNode(doc.DocumentElement, Newtonsoft.Json.Formatting.Indented, true); return(result); }
public void JsonToJxml(string file) { var j = new JsonToJxml(); var json = File.ReadAllText($"JsonTests\\FilterTests\\{file}.json"); var jtoken = JToken.Parse(json); json = jtoken.ToString(); XmlDocument doc = j.ConvertToJxml(jtoken); var x = new JxmlToJson(); var jtoken2 = x.ConvertToJson(doc); var json2 = jtoken2.ToString(); Assert.Equal(json, json2); }
/// <summary> /// Converts an XmlDocument object to a /// Json.NET JToken. /// </summary> /// <param name="doc">Valid XmlDocument object</param> /// <returns>JToken object</returns> public static JToken ToJson(XmlDocument doc) { var jx = new JxmlToJson(); return(jx.ConvertToJson(doc)); }