XML && JSON in .NET
Telerik Academy Alpha

 

Databases

 Table of contents

  • What is XML?

  • Working with XML

  • What is JSON?

  • Working with JSON

What is XML?

 What is XML?

  • XML (eXtensible Markup Language)

    • Universal language (notation) for describing structured data using text with tags

    • The data is stored together with the meta-data about it

    • Used to describe other languages (formats) for data representation

  • XML looks like HTML

    • Text based language, uses tags and attributes

 What is XML?

  • Worldwide standard

    • Supported by the W3C - www.w3c.org

  • Independent of operating system and programming languages

<?xml version="1.0"?>
<library name=".NET Developer's Library">
  <book>
    <title>Professional C# 4.0 and .NET 4</title>
    <author>Christian Nagel</author>
  </book>
  <book>
    <title>Silverlight in Action</title>
    <author>Pete Brown</author>
  </book>
</library>

 XML and HTML

  • Similarities between XML and HTML

    • Both are text based notations

    • Both use tags and attributes

  • Differences between XML and HTML

    • HTML is a language, and XML is a syntax for describing other languages

    • HTML describes the formatting of information, XML describes structured information

    • XML requires the documents to be well-formatted

 Formatting

  • Well-formatted XML:

    • All tags should be closed in the correct order of nesting

    • Attributes should always be closed

    • The document should contain only one root element

    • Tag and attribute names retain certain restrictions

<?xml version="1.0"?>
<library name=".NET Developer's Library">
  <book>
    <title>Professional C# 4.0 and .NET 4</title>
    <author>Christian Nagel</author>
  </book>
</library>

 Advantages

  • Advantages of XML:

    • XML is human readable (unlike binary formats)

    • Any kind of structured data can be stored

    • Data comes with self-describing meta-data

    • Custom XML-based languages can be developed for certain applications

    • Information can be exchanged between different systems with ease

    • Unicode is fully supported

 Disadvantages

  • Disadvantages of XML:

    • XML data is bigger (takes more space) than in binary formats

      • More memory consumption, more network traffic, more hard-disk space

    • Decreased performance

      • Need of parsing / constructing the XML tags

    • XML is not suitable for all kinds of data

      • E.g. graphics, images and video clips

Working with XML

 XML Parsers

  • XML parsers are programming libraries that make the work with XML easier

  • They serve for:

    • Extracting data from XML documents

    • Modifying existing XML documents

    • Building new XML documents

    • Validating XML documents by given schema

    • Transforming XML documents

 XML Parsers

  • They have several working models:

    • DOM (Document Object Model)

      • Represents XML documents as a tree in the memory

      • Allows processing and modifying the document

    • SAX (Simple API for XML Processing)

      • Reads XML documents consequently element by element

      • Event-driven API

      • Allows analyzing the read portions at each step

    • StAX (Streaming API for XML)

      • Like SAX but works in "pull" mode

 XML Parser in .NET

  • The DOM parser provides few important classes:

    • XmlDocument - Represents the DOM tree

      • Usually contains two elements:

        • Header part (prolog)

        • The root element of the XML document

    • XmlNode

      • Abstract base class for all nodes in a DOM tree

    • XmlElement

      • Represents a XML element

    • XmlAttribute

      • Represents an attribute of an XML tag

 XML Parser in .NET - Example

XmlDocument doc = new XmlDocument();
doc.Load("library.xml");

XmlNode rootNode = doc.DocumentElement;
Console.WriteLine("Root node: {0}", rootNode.Name);

foreach (XmlAttribute atr in rootNode.Attributes)
{
  Console.WriteLine("Attribute: {0}={1}", atr.Name, atr.Value);
}

var children = rootNode.ChildNodes;

Console.WriteLine("Book title = {0}", children["title"].InnerText);
Console.WriteLine("Book author = {0}", children["author"].InnerText);
Console.WriteLine("Book isbn = {0}", children["isbn"].InnerText);

 The XmlNode Class

  • Working with siblings and children

    • PreviousSibling / NextSibling – returns the left / right node to the current

    • FirstChild / LastChild – returns the first / last child of the current node

    • Item (indexer [] in C#) – returns the child of the current node by its name

  • Working with the current node:

    • Name – returns the name of the node (element, attribute …)

    • Value – gets the node value

 The XmlNode Class

  • Changing of the current node:

    • AppendChild(…) / PrependChild(…)

      • Inserts new child after / before all other children of the current node

    • InsertBefore(…) / InsertAfter(…)

      • Inserts new child before / after given inheritor

    • RemoveChild(…) / ReplaceChild(…)

      • Removes / replaces given child

What is JSON?

 What is JSON?

  • JSON (JavaScript Object Notation) is a lightweight data format

    • Human and machine-readable

    • Based on the way to create objects in JS

    • Platform independent - can be used with any programming language

{
  firstName: "John", 
  lastName: "Smith", 
  age: 25,
  phoneNumbers: [
    { type: "home", number: "212 555-1234" },
    { type: "fax", number: "646 555-4567" }
  ]
}

 JSON Format

  • The JSON format follows the rules of object literals in JS

    • Strings, numbers and booleans are valid JSON

    • Arrays  and objects are valid JSON

// Strings
"this is string and is valid JSON"

// Arrays
[5, 'string', true]

// Objects
{ 
  "firstname": "Doncho",
  "lastname": "Minkov",
  "occupation": "Technical Trainer"
}

Working with JSON

 JSON.NET Library

  • JSON.NET is a library for parsing JSON in .NET

    • Has better performance than the JavaScriptSerializer

    • Provides LINQ-to-JSON

    • Has an out-of-the-box support for parsing between JSON and XML

// Serialize an object:
var jsonObj = JsonConvert.SerializeObject(obj);

// Deserialize an object:
var copy = JsonConvert.DeserializeObject<ObjType>(jsonObj);

 Configuring JSON.NET

  • JSON.NET can be configured to:

    • Indent the output JSON string

    • To convert JSON to anonymous types

    • To control the casing and properties to parse

    • To skip errors

  • JSON.NET also supports:

    • LINQ-to-JSON

    • Direct parse between XML and JSON

 Configuring JSON.NET

  • To indent the output string use

    • Formatting.Indented

  • Deserializing to anonymous types:

var json = @"{ 
   ""fname"": ""Doncho"",
   ""lname"": ""Minkov"",
   ""occupation"": ""Technical Trainer"" 
 }";

var template = new { FName  = "", LName = "", Occupation = "" };
var person = JsonConvert.DeserializeAnonymousType(json, template);

 JSON.NET Parsing Objects

  • By default JSON.NET takes each Property/Field from the public interface of a class and parses it

  • This can be controlled using attributes:

    • [JsonProperty] tells the parser that Username is called user in the JSON data

    • [JsonIgnore] tells the parser to skip the property Password

public class User
{
  [JsonProperty("user")]
  public string Username { get; set; }

  [JsonIgnore]
  public string Password { get; set; }
}

 JSON.NET Parsing Objects

  • JSON.NET has a support for LINQ-to-JSON

var jsonObj = JObject.Parse(json);
Console.WriteLine("Places in {0}:", jsonObj["name"]);

jsonObj["places"]
    .Select(pl => string
        .Join(", ", pl["categories"].Select(cat => cat["name"]))))
    .Print();

 XML to JSON and JSON to XML

  • Conversions from JSON to XML are done using two methods:

// XML to JSON
string jsonFromXml = JsonConvert.SerializeXNode(doc);

// JSON to XML
XDocument xmlFromJson = JsonConvert.DeserializeXNode(json);

Questions?

[Databases] XML && JSON in .NET

By telerikacademy

[Databases] XML && JSON in .NET

  • 896