Unfortunately I do not see an easy way to get the XmlSerializer
to work with JObject
. I would suggest making a separate to method to handle that case:
private static string ConvertJObjectToXml(JObject jo, string rootElementName)
{
XmlDocument doc = JsonConvert.DeserializeXmlNode(jo.ToString(), rootElementName);
StringBuilder sb = new StringBuilder();
StringWriter sr = new StringWriter(sb);
XmlTextWriter xw = new XmlTextWriter(sr);
xw.Formatting = System.Xml.Formatting.Indented;
doc.WriteTo(xw);
return sb.ToString();
}
Demo:
JObject jo = new JObject();
jo.Add(new JProperty("foo", "bar"));
jo.Add(new JProperty("fizz", "bang"));
string xml = ConvertJObjectToXml(jo, "root");
Console.WriteLine(xml);
Output:
<root>
<foo>bar</foo>
<fizz>bang</fizz>
</root>
If you want your ConvertToXml()
method to be able to handle all objects, you can add a line at the top which checks the type of obData
and delegates to ConvertJObjectToXml()
as necessary:
private string ConvertToXml(object obData)
{
if (obData is JObject)
{
return ConvertJObjectToXml((JObject)obData, "root");
}
// process obData as normal using XmlSerializer
}