using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
public class SingleArrayNodeXmlConverter : XmlNodeConverter
public string ArrayElementName { get; set; }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
var token = JObject.Load(reader);
InjectArrayElements(token, ArrayElementName);
var innerReader = token.CreateReader();
return base.ReadJson(innerReader, objectType, existingValue, serializer);
private static void InjectArrayElements(JToken token, string elementName)
foreach (var childToken in token)
InjectArrayElements(childToken, elementName);
if (token.Type == JTokenType.Array)
var arrayHolder = new JObject{{elementName, token}};
token.Replace(arrayHolder);
public static void Main()
<code>{"desc":"Testing123","city":"Dubai","auth":"author","store":[{"quantity":1,"amount":2.00},{"quantity":100,"amount":-8.33},{"quantity":300,"amount":-15.00}]}</code>
<code>{"desc":"testdesc","city":"SHarjah","auth":"Mohammad","amount":20.00,"shop":"test","store":[{"quantity":1,"amount":10.00},{"quantity":100,"amount":98.33},{"quantity":300,"amount":-1.00}]}</code>
<code>{"desc":"testdesc","city":"Abudabhi","auth":"Mr.121","amount":10.00,"shop":"testa","store":[{"quantity":71,"amount":10.00},{"quantity":100,"amount":95.33},{"quantity":300,"amount":-8.00}]}</code>
var doc = XDocument.Parse(xml);
var converter = new SingleArrayNodeXmlConverter{DeserializeRootElementName = "root", WriteArrayAttribute = false, ArrayElementName = "element"};
foreach (var code in doc.Descendants("code"))
if (string.IsNullOrWhiteSpace(code.Value))
var innerElements = (XmlNode)(XmlDocument)JsonConvert.DeserializeObject(code.Value, typeof(XmlDocument), converter);
if (innerElements == null)
code.ReplaceAll(XDocument.Parse(innerElements.OuterXml).Root);