Pytanie Porównaj dwa JObjects lub JArray


Mam tę aplikację WPF, która pobiera dane z usługi sieciowej REST i zwraca dane JSON. Następnie dane te zostaną przekonwertowane na xml. Ten plik xml później zostanie przekonwertowany z powrotem na JSON, aby porównać go z nowymi danymi JSON z usługi sieciowej REST, wywołującej tę samą funkcję. Jak mam to zrobic?

Oto próbka tego, co zrobiłem:

HTTPGet req = new HTTPGet();
            req.Request("http://restservice//function");
            string str= req.ResponseBody;
            StringBuilder xmlTemplate = new StringBuilder("{\"?xml\":{\"@version\": \"1.0\",\"@standalone\": \"no\"},\"root\":REPLACE }");
            StringBuilder json = xmlTemplate.Replace(Constants.Constants.XMLREPLACEVAL, str); //this so that it will be same with the JObject from XML file
            JObject jObject1 = JObject.Parse(json.ToString());

            XmlDocument doc = new XmlDocument();
            string xml = File.ReadAllText("json.xml");
            doc.LoadXml(xml);
            string jsonText = JsonConvert.SerializeXmlNode(doc);
            JObject jObject2 = JObject.Parse(jsonText);

            if(jObject1.Equals(jObject2))
                //DO SOMETHING

15
2017-07-25 10:55


pochodzenie


Czego spróbowałeś do tej pory? Jakiś konkretny kod, z którym masz problem? - Svetlin Panayotov


Odpowiedzi:


Wydaje się, że JObject nie zastępuje metody Equals. Niemniej jednak JObject dziedziczy klasę JToken, a JToken ma statyczną metodę DeepEquals, która może być użyta do określenia, czy jeden JToken jest równy innemu JTokenowi. Możesz zrobić coś takiego:

if (JToken.DeepEquals(jObject1, jObject2))
{
    //DO SOMETHING
}

32
2017-07-25 11:31