Member 12183079 Ответов: 1

Как преобразовать JSON в datatable в C#


HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://xml.flightview.com/fvDemoConsOOOI/fvxml.exe?a=fvxmldemoSoo1&b=thrk$xxxx&depap=xxx&depdate=xxxxxx&dephr=xxxx");
httpWebRequest.Method = WebRequestMethods.Http.Get;
httpWebRequest.Accept = "application/json; charset=utf-8";
string file;
var response = (HttpWebResponse)httpWebRequest.GetResponse();
using (var sr = new StreamReader(response.GetResponseStream()))
{
file = sr.ReadToEnd();
}
//var json = JObject.Parse(file);
var table = JsonConvert.DeserializeAnonymousType(file, new { Makes = default(DataTable) }).Makes;
if (table.Rows.Count > 0)
{
//do something
}


Что я уже пробовал:

Я пытаюсь сделать этот код, но получаю исключение -

Исключение типа "Newtonsoft.Json.JsonReaderException" произошло в Newtonsoft.Json.dll но не был обработан в пользовательском коде
Дополнительная информация: неожиданный символ, встреченный при разборе значения: <. Путь ", строка 0, позиция 0.


так любезно пожалуйста помогите мне срочно

F-ES Sitecore

Из ваших других вопросов по этому вопросу похоже, что ваш веб-метод возвращает не json, а либо html, либо xml. Это объясняет, почему первый элемент в ваших данных - "<", а не "[" Или " { " , как можно было бы ожидать с помощью json.

Если ваш веб-метод возвращает xml, то используйте xml-десериализатор.

Graeme_Grant

Вы пробовали установить точку останова на этой линии?

var json = JObject.Parse(file);

Теперь посмотрим на содержимое переменной file в окне местных жителей ... это называется "отладка".

1 Ответов

Рейтинг:
0

David_Wimbley

Ваша проблема заключается в том, что вы пытаетесь обработать XML-ответ так, как если бы это был JSON (не уверен, что вы поняли, что это был xml, поэтому я указываю на это).

Откройте этот URL-адрес в своем браузере: http://xml.flightview.com/fvDemoConsOOOI/fvxml.exe?a=fvxmldemoSoo1&b=thrk$xxxx&depap=xxx&depdate=xxxxxx&dephr=xxxx[^]

Поэтому вам нужно сначала преобразовать XML в JSON, а затем обработать JSON, когда он вернется.

Для этого вам нужно использовать JsonConvert.SerializeXmlNode() метод. В вашем случае вам вероятно понадобится промежуточный шаг который выглядит примерно так

var xmldoc = new XmlDocument();
xmldoc.LoadXml(file);
var json = JsonConvert.SerializeXmlNode(xmldoc);
var table = JsonConvert.DeserializeAnonymousType(json, new { Makes = default(DataTable) }).Makes;


Оттуда его до вас, чтобы сделать с json все, что вам нужно сделать.