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 partial class JsonExtensions
public static XDocument LoadXNode(string pathJson, string deserializeRootElementName)
using (var stream = File.OpenRead(pathJson))
return LoadXNode(stream, deserializeRootElementName);
public static XDocument LoadXNode(Stream stream, string deserializeRootElementName)
using (var textReader = new StreamReader(stream, Encoding.UTF8, true, 1024, true))
return LoadXNode(textReader, deserializeRootElementName);
public static XDocument LoadXNode(TextReader textReader, string deserializeRootElementName)
var settings = new JsonSerializerSettings
Converters = { new XmlNodeConverter { DeserializeRootElementName = deserializeRootElementName } },
using (var jsonReader = new JsonTextReader(textReader) { CloseInput = false })
return JsonSerializer.CreateDefault(settings).Deserialize<XDocument>(jsonReader);
public static void StreamJsonToXml(string pathJson, string pathXml, string deserializeRootElementName, SaveOptions saveOptions = SaveOptions.None)
var doc = LoadXNode(pathJson, deserializeRootElementName);
doc.Save(pathXml, saveOptions);
public static void Test()
var pathJson = "Question56260418.json";
var outputPath = "Question56260418.xml";
File.WriteAllText(pathJson, GetJson());
JsonExtensions.StreamJsonToXml(pathJson, outputPath, "json");
Assert.IsTrue(File.Exists(outputPath));
Console.WriteLine(File.ReadAllText(outputPath));
var json = @"{""Root"": [
""Name"": ""Jane Doe 1"",
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: ");