чтение ответа HttpwebResponse json, С#

В одном из моих приложений я получаю ответ от веб-запроса. Служба является службой Restful и вернет результат, аналогичный приведенному ниже формату JSON:

{
    "id" : "1lad07",
    "text" : "test",
    "url" : "http:\/\/twitpic.com\/1lacuz",
    "width" : 220,
    "height" : 84,
    "size" : 8722,
    "type" : "png",
    "timestamp" : "Wed, 05 May 2010 16:11:48 +0000",
    "user" : {
        "id" : 12345,
        "screen_name" : "twitpicuser"
    }
}   

и вот мой текущий код:

    byte[] bytes = Encoding.GetEncoding(contentEncoding).GetBytes(contents.ToString());
    request.ContentLength = bytes.Length;

    using (var requestStream = request.GetRequestStream()) {

        requestStream.Write(bytes, 0, bytes.Length);

        using (var twitpicResponse = (HttpWebResponse)request.GetResponse()) {

            using (var reader = new StreamReader(twitpicResponse.GetResponseStream())) {

                //What should I do here?

            }

        }

    }

Как я могу прочитать ответ? Мне нужен URL и имя пользователя.


person tugberk    schedule 31.03.2011    source источник
comment
Возможно, было бы неплохо проверить Restsharp, чтобы выполнить вызовы службы отдыха github.com/ johnsheehan/RestSharp/wiki/Getting-Started сделает вашу жизнь в 100 000 раз проще, и вы сможете настроить объектные модели для декодирования.   -  person anthonyvscode    schedule 31.03.2011
comment
@anthonyvscode wiki/get-started перемещен сюда github.com/restsharp/RestSharp/wiki /Начало работы   -  person jaybro    schedule 14.10.2019


Ответы (3)


Сначала вам нужен объект

public class MyObject {
  public string Id {get;set;}
  public string Text {get;set;}
  ...
}

Тогда здесь

    using (var twitpicResponse = (HttpWebResponse)request.GetResponse()) {

        using (var reader = new StreamReader(twitpicResponse.GetResponseStream())) {
            JavaScriptSerializer js = new JavaScriptSerializer();
            var objText = reader.ReadToEnd();
            MyObject myojb = (MyObject)js.Deserialize(objText,typeof(MyObject));
        }

    }

Я не тестировал имеющийся у вас иерархический объект, но это должно дать вам доступ к нужным вам свойствам.

JavaScriptSerializer System.Web.Script.Сериализация

person Jason Watts    schedule 31.03.2011
comment
Спасибо за ответ. честно говоря, я был немного ленив для этого вопроса. Пару месяцев назад я создал оболочку для Google URL Shortener API и использовал для этого библиотеку System.Web.Extensions. - person tugberk; 31.03.2011
comment
Я пробовал ваш код, но выдает ошибку. Нет метода перегрузки. «Десериализация» принимает «2» аргумента. Я что-то пропустил? - person SHEKHAR SHETE; 16.06.2014
comment
Этому коду больше 3 лет. Вероятно, сейчас есть лучшие способы сделать это. Я также не знаю, какая это была версия JavaScriptSerializer. Может изменилось? - person Jason Watts; 01.07.2014
comment
Эй, я оживляю нить... если у нас есть массив массивов строк... какова структура объекта для этого? - person Jean-philippe Emond; 05.08.2016
comment
Я бы рекомендовал использовать Json.Net для сериализации Json в объект. более JavaScriptSerializer. Он более эффективен и теперь рекомендуется Microsoft для такой работы вместо собственного сериализатора. - person Liam; 21.12.2016
comment
var myobj = js.Deserialize‹MyObject›(objText); - person Yves Rochon; 14.03.2018

Я бы использовал RestSharp — https://github.com/restsharp/RestSharp

Создайте класс для десериализации в:

public class MyObject {
    public string Id { get; set; }
    public string Text { get; set; }
    ...
}

И код для получения этого объекта:

RestClient client = new RestClient("http://whatever.com");
RestRequest request = new RestRequest("path/to/object");
request.AddParameter("id", "123");

// The above code will make a request URL of 
// "http://whatever.com/path/to/object?id=123"
// You can pick and choose what you need

var response = client.Execute<MyObject>(request);

MyObject obj = response.Data;

Посетите http://restsharp.org/, чтобы начать работу.

person Ben Cull    schedule 31.03.2011
comment
Мой ответ получает источник в контенте, а не в данных - person logeshpalani32; 09.07.2019

Если вы получаете источник в контенте, используйте следующий метод

try
{
    var response = restClient.Execute<List<EmpModel>>(restRequest);

    var jsonContent = response.Content;

    var data = JsonConvert.DeserializeObject<List<EmpModel>>(jsonContent);

    foreach (EmpModel item in data)
    {
        listPassingData?.Add(item);
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Data get mathod problem {ex} ");
}
person logeshpalani32    schedule 09.07.2019