DadTo2 DadTo2 - 4 months ago 97
JSON Question

Converting JSON Array to XML in C#

All, I know this question has been asked multiple times, and I feel like I have looked at every single one of them on here! I have a C# Winforms application that is making a call to an outside webhook, pulling in JSON formatted data. I need to take this data and convert it to a data table, with the end result imported into a database. The thing I am stuck on, and have been for the last day and a half, is trying to parse the JSON data into XML.

Here is the JSON data (example) I am getting from the webhook:

[
["Item Title",
"Bidder Name",
"Bidder Email",
"Bidder Phone Number",
"Bidder Username",
"Bid Amount",
"Bid Time",
"Operation",
"Auto Bid Amount",
"Bidder Address",
"Bidder City",
"Bidder State",
"Bidder Country"
],
["Test item 1(#)"],
["",
"Tom Kelly",
"tomkelly7630@gmail.com",
"6303278300",
"testaccount",
"50.0",
"07/09/2016 07:17 PM CDT",
"Bid Amount",
null,
null,
null,
null,
"US"
]
]


At first I tried using the DeserializeXMLNode function, but that didn't work.

XmlNode xml = JsonConvert.DeserializeXmlNode(body, "BiddingHistory");


Then I thought that I would use the DeserializeObject function, but again, not working.

var jRst = JsonConvert.DeserializeObject(body);


When I use the DeserializeObject function I am getting the following result:

{[
[
"Item Title",
"Bidder Name",
"Bidder Email",
"Bidder Phone Number",
"Bidder Username",
"Bid Amount",
"Bid Time",
"Operation",
"Auto Bid Amount",
"Bidder Address",
"Bidder City",
"Bidder State",
"Bidder Country"
],
[
"Test Item 1"
],
[
"",
"Tom Kelly",
"tomkelly7630@gmail.com",
"6303278300",
"testaccount",
"75.0",
"07/30/2016 06:14 PM CDT",
"Bid Amount",
null,
null,
null,
null,
"US"
]
]}


After converting the object to a string, I ran this through the XMLNodeConverter, and it was failing on the "#" character, so I did a string replace and took out that character (wasn't needed anyway and I do not have control of what is coming to me in the JSON data) then ran my code again.

XmlNode xml = JsonConvert.DeserializeXmlNode(sBody, "BiddingHistory");


So now what I am getting is this error:


XmlNodeConverter can only convert JSON that begins with an object


Would someone please steer me in the right direction here? I'm thinking this is a simple thing to do and I am overcomplicating it.

Thanks.

Answer

You are getting an error because your JSON data is an array and what you have done is:

XmlNode xml = JsonConvert.DeserializeXmlNode(sBody, "BiddingHistory");

the above line of code will only work for JSON objects.

So, if your JSON is an Array, then try this:

XmlNode xml = JsonConvert.DeserializeXmlNode("{\"Row\":" + sBody + "}", "BiddingHistory").ToXmlString();