using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
public static void Test()
Console.WriteLine("\nTesting simple JSON conversion: ");
var simpleJson = @"{'root' : { 'person' : [{'name':'Alan'},{'name':'Louis'}]}}";
Console.WriteLine(JToken.Parse(simpleJson));
Console.WriteLine(JsonConvert.DeserializeXmlNode(simpleJson).GetOuterXml());
Console.WriteLine("\nTesting result of JsonExtensions.DeserializeXmlNode(): ");
var doc = JsonExtensions.DeserializeXmlNode(data, "root", "array");
Console.WriteLine(doc.GetOuterXml());
var json = @"[{""LearningActivityKey"":2122,""ModuleName"":""certName"",""ModuleVersion"":0.0,""ModuleDescription"":null,""BadgeName"":null,""BadgeVersion"":null,""BadgeDescription"":null,""MozillaBadge"":null,""LearningActivityName"":null,""LearningActivityDescription"":null,""StepName"":null,""StepVersion"":null,""StepDescription"":null,""IsActive"":false,""IsPublished"":false,""CreatedDate"":""0001-01-01T00:00:00"",""ModifiedDate"":null},{""LearningActivityKey"":2122,""ModuleName"":""certName"",""ModuleVersion"":0.0,""ModuleDescription"":null,""BadgeName"":null,""BadgeVersion"":null,""BadgeDescription"":null,""MozillaBadge"":null,""LearningActivityName"":null,""LearningActivityDescription"":null,""StepName"":null,""StepVersion"":null,""StepDescription"":null,""IsActive"":false,""IsPublished"":false,""CreatedDate"":""0001-01-01T00:00:00"",""ModifiedDate"":null}]";
public static partial class JsonExtensions
public static XmlDocument DeserializeXmlNode(string json, string rootName, string rootNodeName)
return DeserializeXmlNode(new StringReader(json), rootName, rootNodeName);
public static XmlDocument DeserializeXmlNode(TextReader textReader, string rootName, string rootNodeName)
var prefix = "{" + JsonConvert.SerializeObject(rootNodeName) + ":";
using (var combinedReader = new StringReader(prefix).Concat(textReader).Concat(new StringReader(postfix)))
var settings = new JsonSerializerSettings
Converters = { new Newtonsoft.Json.Converters.XmlNodeConverter() { DeserializeRootElementName = rootName} },
DateParseHandling = DateParseHandling.None,
using (var jsonReader = new JsonTextReader(combinedReader) { CloseInput = false, DateParseHandling = DateParseHandling.None })
return JsonSerializer.CreateDefault(settings).Deserialize<XmlDocument>(jsonReader);
public static class Extensions
public static TextReader Concat(this TextReader first, TextReader second)
return new ChainedTextReader(first, second);
private class ChainedTextReader : TextReader
private TextReader first;
private TextReader second;
private bool readFirst = true;
public ChainedTextReader(TextReader first, TextReader second)
public override int Peek()
public override int Read()
int value = first.Read();
public override void Close()
protected override void Dispose(bool disposing)
public static void Main()
Console.WriteLine("Environment version: " + Environment.Version);
Console.WriteLine("Json.NET version: " + typeof(JsonSerializer).Assembly.FullName);
Console.WriteLine("Failed with unhandled exception: ");
public class AssertionFailedException : System.Exception
public AssertionFailedException() : base() { }
public AssertionFailedException(string s) : base(s) { }
public static class Assert
public static void IsTrue(bool value)
public static void IsTrue(bool value, string message)
throw new AssertionFailedException(message ?? "failed");
public static class XmlSerializationHelper
public static string GetOuterXml(this XmlNode node, bool indent = true)
using (var textWriter = new StringWriter())
var settings = new XmlWriterSettings
OmitXmlDeclaration = true,
using (var xmlWriter = XmlWriter.Create(textWriter, settings))
return textWriter.ToString();