JSON.NET to darmowa i naprawdę prosta w użyciu biblioteka, która umożliwia parsowanie JSON z poziomu c#. Instalujemy ją oczywiście z NuGet:
Następnie API jest na tyle proste, że wystarczy tak naprawdę nam tylko IntelliSense:
var person = new Person() {FirstName = "Piotr", LastName = "Zielinski"}; string content = JsonConvert.SerializeObject(person); Console.WriteLine(content);
Efektem będzie konwersja obiektu c# do JSON czyli:
{"FirstName":"Piotr","LastName":"Zielinski"}
Podobnie można dokonać deserializacji:
var person = new Person() {FirstName = "Piotr", LastName = "Zielinski"}; string content = JsonConvert.SerializeObject(person); Person newPerson = JsonConvert.DeserializeObject<Person>(content);
Możliwe jest również manipulowanie na obiekcie JObject:
JObject person = JObject.Parse(@"{'FirstName':'Piotr','LastName':'Zielinski'}");
JObject eksponuje JSON i mamy do niego dostęp np. za pomącą indexer’a:
JObject person = JObject.Parse(@"{'FirstName':'Piotr','LastName':'Zielinski'}"); Console.WriteLine(person["FirstName"]);
Jeśli dana właściwość to tablica to mamy dostęp do niej za pomocą standardowego indeksu:
JObject person = JObject.Parse(@"{'FirstName':'Piotr','LastName':'Zielinski','Numbers':['1','2','3']}"); Console.WriteLine(person["Numbers"][0]); Console.WriteLine(person["Numbers"][1]);
Jeśli przyjrzyjmy się JObject, to zobaczymy, że jest tam wiele metod do odpytywania obiektu np.:
public IEnumerable<JToken> Descendants
JSON.NET wspiera również LINQ, co czyni wyszukiwanie danych bardzo łatwe (przykład z dokumentacji):
var categories = from c in rss["channel"]["item"].Children()["category"].Values<string>() group c by c into g orderby g.Count() descending select new { Category = g.Key, Count = g.Count() }; foreach (var c in categories) { Console.WriteLine(c.Category + " - Count: " + c.Count); }
Dzięki JSON.NET możliwa jest konwersja pomiędzy XML a JSON:
XmlDocument xmlDocument=new XmlDocument(); xmlDocument.LoadXml("<Person><FirstName>Piotr</FirstName><LastName>Zielinski</LastName></Person>"); string jsonText = JsonConvert.SerializeXmlNode(xmlDocument);
Powyższe przykłady dotyczą przeszukiwania obiektów. Analogicznie jednak można je tworzyć tzn.:
JObject jObject=new JObject(); jObject["FirstName"] = "Piotr"; jObject["Numbers"]=new JArray("1","2","3"); Console.WriteLine(jObject.ToString());
Kod wygeneruje następujący JSON:
{ "FirstName": "Piotr", "Numbers": [ "1", "2", "3" ] }
Od C# 4.0 mamy do dyspozycji dynamic dlatego ładniejszą składnie uzyskamy pisząc:
dynamic jObject=new JObject(); jObject.FirstName = "Piotr"; jObject.Numbers=new JArray("1","2","3"); Console.WriteLine(jObject.ToString());
Dodam, że JSON.NET jest jednym z najwydajniejszych serializerów – https://sbelus.wordpress.com/2014/03/28/serialization-testing-performance/
O, nie wiedziałem o możliwości konwersji XML na JSON.
Jego zaletą jest również to, że w łatwy sposób ułatwia serializację ‘DateTime’ do konwersji, która nas interesuje:
http://james.newtonking.com/json/help/index.html?topic=html/DatesInJSON.htm
🙂
Bardzo się przyda. Pomimo 4 lat można coś z tej biblioteki Java Script wyciągnąć 🙂