none
Создание запроса для сервера, чтобы получить данные в формате Json RRS feed

  • Вопрос

  • Здравствуйте

    Я хочу сериализовать данные, получаемые от сервера в формате Json
    Подскажите пожалуйста - как оформить запрос, чтобы получить данные и сразу их сериализовать.
    Как сериализовать более менее понятно в теории, а вот как запрос сделать и что получать в ответ от серевера не совсем понятно.
    20 июля 2011 г. 12:21

Ответы

Все ответы

  • Что выступает сервером?
     
    20 июля 2011 г. 12:46
    Модератор
  •   [Serializable]
      public class Person
      {
       public string FirstName;
     public string LastName; public class PersonService { public string SerializeData() { Person dave = new Person(); dave.FirstName = "Иван"; dave.LastName = "Иванов"; JavaScriptSerializer jss = new JavaScriptSerializer(); // Results in {"FirstName":"Иван","LastName":"Иванов"} string json = jss.Serialize<Person>(dave); return json; } public string DeSerilizeData() { //JsonString string json = "JSonString"; IList<Person> persons = new JavaScriptSerializer().Deserialize<IList<Person>>(json); return persons.Count.ToString(); } }


    Сервером выступает сайт

    Для разминки набросал два класса, в первом классе поля для хранения и записи данных
    Во втором сериализация и десериализация данных происходит

    Но почему то в строке

    string json = jss.Serialize<Person>(dave);

    Происходит ошибка - Error    1    The non-generic method 'System.Web.Script.Serialization.JavaScriptSerializer.Serialize(object, System.Text.StringBuilder, System.Web.Script.Serialization.JavaScriptSerializer.SerializationFormat)' cannot be used with type arguments   

    Подскажите, пожалуйста, из-за чего она происходит?

    20 июля 2011 г. 17:00
  • Вместо string json = jss.Serialize<Person>(dave);
    наверно нужно string json = jss.Serialize(dave);
     
    Используй WCF сервис вместо сайта.
     
     
    21 июля 2011 г. 3:49
    Модератор
  • Большое спасибо - помогло очень, всё работает

    Делаю запрос по нужному URL - мне приходит ответ: строка в формате Json, Я её сериализую. В коде создан один класс с нужными полями и второй класс, в нём метод - возвращающий коллекцию объектов первого класса, в чьи поля происходит сериализация.....
    Я хочу, используя DataSourceObject и возвращающий метод вывести результат в GridView на страницу.

    Делаю так:

     protected void Page_Load(object sender, EventArgs e)
     {
     
     }
    
     protected void btnFindProduction_Click(object sender, EventArgs e)
     {
      GetJSonData.getData(); 
     } 
    
     [Serializable]
     public class AutoData
     {
      public string makename;		  //Полное наименование производителя
    	 public string makelogo;			// Код производителя 
    	 public string detailnum;		  // Каталожный номер детали
    	 public string detailname;     // Наименование детали
    	 public string pricerur;			// Цена в рублях с Вашей скидкой
    	 public string quantity;			// Кол-во детали на складе постващика (может быть пустым для заказных прайс-листов)			
    	 public string time;				// Средний срок поставки детали в днях
    	 public string timegar;			// Гарантированный срок поставки детали в днях
    	 public string country;			// Регион поставки
    	 public string supcode;			// Уникальный код поставщика
     }
    
     public class GetJSonData
     {
      
      public List<AutoData> DeSerilizeData()
      {
      List<AutoData> persons = new JavaScriptSerializer().Deserialize<List<AutoData>>(getData());
    
      return persons;
      }
      
    
      public static string getData()
      {
      WebRequest req = WebRequest.Create("http://www.japarts.ru/?id=ws;action=search;login=test;pass=testws;makename=mitsubishi;makelogo=mc;detailnum=MB831042;cross=1");
      WebResponse resp = req.GetResponse(); 
      StreamReader reader = new StreamReader(resp.GetResponseStream(),
           Encoding.Default);
      //JsonString
      return reader.ReadToEnd();
      }
     }
    

    Добавляю на страницу GridView,  в нём создаю колонку и используя ObjectDataSource добавляю путь к методу
    public List<AutoData> DeSerilizeData(), который возвращает коллекцию обьектов...
    
    Но происходит ошибка - в поле нет никакой информации....
    Хотя если емного поменять метод этот же самый - например поменять возвращаемое значение на string и пройдя foreachem по всем объектов и записывая значеия полей в строку - всё работает....
    Не могу понять, почему) Подскажите, пожалуйста

    Ошибка - 

    The data source for GridView with id 'GridView1' did not have any properties or attributes from which to generate columns.  Ensure that your data source has content.




    21 июля 2011 г. 15:53
  • Здравствуйте

    В классе

    public class AutoData
     {
    	 public string makename;		 //Полное наименование производителя
    	 public string makelogo;			// Код производителя 
    	 public string detailnum;		 // Каталожный номер детали
    	 public string detailname;  // Наименование детали
    	 public string pricerur;			// Цена в рублях с Вашей скидкой
    	 public string quantity;			// Кол-во детали на складе постващика (может быть пустым для заказных прайс-листов)			
    	 public string time;				// Средний срок поставки детали в днях
    	 public string timegar;			// Гарантированный срок поставки детали в днях
    	 public string country;			// Регион поставки
    	 public string supcode;			// Уникальный код поставщика
     }
    
    

    измените public поля на public свойства, тогда генерация колонок должна быть успешной. Т.е.

    public string makename;
    // заменить на
    public string makename { get; set; }
    

     


    Для связи [mail]
    22 июля 2011 г. 4:51
    Модератор