using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json.Linq;

namespace Newtonsoft.Json.Tests.Documentation
{
  public class JsonNetVsWindowsDataJsonTests
  {
    public void CreatingJson()
    {
#if NETFX_CORE
      #region CreatingJSON
      // Windows.Data.Json
      // -----------------
      JsonObject jsonObject = new JsonObject
        {
          {"CPU", JsonValue.CreateStringValue("Intel")},
          {
            "Drives", new JsonArray
                        {
                          JsonValue.CreateStringValue("DVD read/writer"),
                          JsonValue.CreateStringValue("500 gigabyte hard drive")
                        }
          }
        };
      string json1 = jsonObject.Stringify();

      // LINQ to JSON
      // ------------
      JObject jObject = new JObject
        {
          {"CPU", "Intel"},
          {
            "Drives", new JArray
                        {
                          "DVD read/writer",
                          "500 gigabyte hard drive"
                        }
          }
        };
      string json2 = jObject.ToString();
      #endregion
#endif
    }

    public void QueryingJson()
    {
#if NETFX_CORE
      #region QueryingJSON
      string json = @"{
        'channel': {
          'title': 'James Newton-King',
          'link': 'http://james.newtonking.com',
          'description': 'James Newton-King's blog.',
          'item': [
            {
              'title': 'Json.NET 1.3 + New license + Now on CodePlex',
              'description': 'Annoucing the release of Json.NET 1.3, the MIT license and the source being available on CodePlex',
              'link': 'http://james.newtonking.com/projects/json-net.aspx',
              'category': [
                'Json.NET',
                'CodePlex'
              ]
            }
          ]
        }
      }";
 
      // Windows.Data.Json
      // -----------------
      JsonObject jsonObject = JsonObject.Parse(json);
      string itemTitle1 = jsonObject["channel"].GetObject()["item"].GetArray()[0].GetObject()["title"].GetString();
 
      // LINQ to JSON
      // ------------
      JObject jObject = JObject.Parse(json);
      string itemTitle2 = (string)jObject["channel"]["item"][0]["title"];
      #endregion
#endif
    }

    public void Converting()
    {
#if NETFX_CORE
      #region Converting
      JsonObject jsonObject = new JsonObject
        {
          {"CPU", JsonValue.CreateStringValue("Intel")},
          {"Drives", new JsonArray {
              JsonValue.CreateStringValue("DVD read/writer"),
              JsonValue.CreateStringValue("500 gigabyte hard drive")
            }
          }
        };
 
      // convert Windows.Data.Json to LINQ to JSON
      JObject o = JObject.FromObject(jsonObject);
 
      // convert LINQ to JSON to Windows.Data.Json
      JArray a = (JArray)o["Drives"];
      JsonArray jsonArray = a.ToObject<JsonArray>();
      #endregion
#endif
    }
  }
}