using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
public static void Main()
{'id': '532-513jg-5ujkl-5jiklf',
'externalGuid': '93804jlkfes',
'id': '532kg-fw13jg-553klal-5jiklf',
'id': 'jkl39-jkl39084-agd208-hh82a9',
'id': 'jkl39-jkl384-123208-hh82a9',
var xml = (XmlDocument)JsonConvert.DeserializeObject(jsonString, typeof(XmlDocument), new ArrayXmlNodeConverter("tag","Property"));
XmlWriterSettings settings = new XmlWriterSettings { Indent = true };
using (var stringWriter = new StringWriter())
using (var xmlTextWriter = XmlWriter.Create(stringWriter,settings))
xml.WriteTo(xmlTextWriter);
Console.WriteLine(stringWriter.GetStringBuilder().ToString());
public class ArrayXmlNodeConverter : XmlNodeConverter
public readonly string _arrayRootName;
public ArrayXmlNodeConverter(string rootElement,string arrayRootName)
(DeserializeRootElementName,_arrayRootName) = (rootElement,arrayRootName);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
var token = JObject.Load(reader);
ChangeArrayElementRoot(token);
reader = token.CreateReader();
return base.ReadJson(reader, objectType, existingValue, serializer);
private void ChangeArrayElementRoot(JToken token)
if (token.Type == JTokenType.Array)
var arrayHolder = new JObject { { _arrayRootName, token } };
token.Replace(arrayHolder);
foreach (var childToken in token)
ChangeArrayElementRoot(childToken);