komalilella Ответов: 3

как повторно удалить эту ошибку:недопустимый примитив JSON: System.Net.HttpWebResponse


Всем привет.

На самом деле мне это нравилось:
Я взял сервис json на основе rest, а затем потребил и немедленно де-сериализовал эту строку json.

Я написал код примерно так:
private void button1_Click(object sender, EventArgs e)
{
    string apiUrl = "http://api.geonames.org/citiesJSON?formatted=true&north=44.1&south=-9.9&east=-22.4&west=55.2&lang=de&username=demo&style=full";
    Uri address = new Uri(apiUrl);

    System.Net.HttpWebRequest Request = System.Net.WebRequest.Create(address) as System.Net.HttpWebRequest;
    Request.Method = "GET";
    Request.ContentType = "text/json";
     strResponse = Request.GetResponse().ToString();
    
    JavaScriptSerializer js = new JavaScriptSerializer();

    var object1 = js.Deserialize<dictionary><string,object>>(strResponse);

    foreach (KeyValuePair<string,object> result in object1)
        {

            textBox1.Text = textBox1.Text + result.Key;
            textBox2.Text = textBox2.Text + result.Value.ToString();

        }
 }

Когда я нажал CTRL+F5 в тот раз, я получил такую ошибку:
Invalid JSON primitive: System.Net.HttpWebResponse.

Пожалуйста, дайте мне знать решение.

Заранее спасибо.

3 Ответов

Рейтинг:
1

abiruban

Привет пожалуйста рефр
http://stackoverflow.com/questions/2445874/messageinvalid-json-primitive-recordid[^]


Рейтинг:
0

Manfred Rudolf Bihy

Ваша ошибка в этой строке:

string strres1 = strResponse.ToString();


После этого ваша переменная strres1 равно System.Net.HttpWebResponse Это недопустимая строка JSON. Это происходит потому, что поведение по умолчанию ToString унаследовано от object выводится полное имя типа. Это также мерзость-ставить перед именем переменной типа, который определенно не является строкой, префикс str. Это заставило вас думать, что у вас есть струна, когда это было действительно HttpWebResponse объект.
Вы, вероятно, имели в виду, чтобы получить содержимое из response stream. Поток извлекается через strResponse.GetResponseStream метод. Как только у вас есть поток, вы можете прочитать содержимое оттуда. Вот как это делается, так что, пожалуйста, придерживайтесь этого.

с уважением,

—МРБ


komalilella

я убрал это:
строка strres1 = strResponse.Метод toString();
но stream reader будет использоваться в xml write..но здесь я использую json..
я получаю ту же ошибку.. недопустимый примитив json..

Manfred Rudolf Bihy

Вам нужно будет прочитать из потока ответов и собрать его в строковую переменную. Это можно передать в метод десериализации JSON.

Рейтинг:
0

Member 13723094

// действительный объект JSON
var dataToLog = {'foo':'foovalue', 'bar':'barvalue'};

$.Аякс({
тип: "почта",
url: '/logger/log',
contentType: 'application/json; charset=UTF-8',
сведения: в формате JSON.преобразовать в строки(dataToLog)
}).сделано(() =&ГТ; {
// сделать нечто
});


CHill60

Этому вопросу уже более 6 лет! Придерживайтесь ответов на новые сообщения, где ОП все еще нуждается в помощи

Richard Deeming

Шесть лет опоздания, и даже не попытка ответить на этот вопрос!

Помимо того, что вы придерживаетесь новых постов, вам нужно Читать (и понимать) ВОПРОС перед публикацией решения.