Json для объектов С# в .NET

Я давно хотел создать свой собственный сайт/приложение статистики по Dota 2. По сути, я использую API Steam для сбора всех необходимых данных. Большая часть этих данных хранится в формате Json.

Я пытался десериализовать формат, чтобы иметь данные в удобочитаемом формате. В идеале я хочу превратить его в объекты, а затем поместить их в сетку данных, чтобы я мог правильно представить эти данные пользователю.

Кроме того, я использую Portable Steam WebAPI Wrapper для пакетов C# и Newtonsoft.

Public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

   SteamWebAPI.SetGlobalKey("MysteamKey");

    var r2 =  SteamWebAPI.Game().Dota2().IDOTA2().GetHeroes().GetResponseString(RequestFormat.JSON);

    var ds1 = Newtonsoft.Json.JsonConvert.DeserializeObject(r2);
    RootObject hero = JsonConvert.DeserializeObject<RootObject>(r2);


    Response.Write("Display Hero Data.. </br></br>");
    Response.Write( hero.result.heroes );


    Response.Write(hero);


   }
}

Вот мой класс Hero: я в основном использовал этот веб-сайт, чтобы придумать его - http://json2csharp.com/ , файл Json можно найти здесь https://api.steampowered.com/IEconDOTA2_570/GetHeroes/v0001/?key=2D13D618DA712015812E970165632F02&language=en_us

public class Hero
{
public string name { get; set; }
public int id { get; set; }
public string localized_name { get; set; }
}

public class Result
{
public List<Hero> heroes { get; set; }
public int status { get; set; }
public int count { get; set; }
}

public class RootObject
{
    public Result result { get; set; }
}

В настоящее время это то, что отображается из моего текущего кода:

" Показать данные о герое..

System.Collections.Generic.List`1[Hero]RootObject"

Кажется, что он не отображает какие-либо данные из файла json :/ Я уверен, что здесь что-то упускаю, но я просто не могу понять это :(

Мне действительно нужна помощь. Если я смогу заставить это работать, я смогу начать извлекать все остальные данные, которые мне нужны. Буду признателен за любую помощь. Заранее спасибо.


person warboss    schedule 23.06.2015    source источник


Ответы (1)


Response.Write( hero.result.heroes );

Вот только собираюсь выписать "струнные" версии героев. Поскольку это объект, он просто предоставляет вам функцию List (или Object!) .ToString() (которая отображает System.Collections.Generic.List`1[Hero]RootObject)

Вам нужно будет перебрать коллекцию. Я вижу, что вы пишете прямо в ответ, что я бы не одобрял, но если вы хотите, чтобы они были записаны вместе с ним, вы можете использовать что-то вроде этого:

foreach(var hero in hero.result.heroes)
{
    Response.Write(String.Format("<p>Name: {0}, ID: {1}</p>", hero.name, hero.id)
}

Поскольку похоже, что вы возитесь с веб-формами, я предлагаю вам взглянуть на некоторые учебники о том, как их использовать (или mvc)

person willaien    schedule 23.06.2015
comment
Спасибо за ваш быстрый ответ, я получаю сообщение об ошибке. Ссылка на объект не указывает на экземпляр объекта. Я временно использую response.write, пока не разберусь с этим. Затем я могу вывести результаты непосредственно в сетку данных. - person warboss; 23.06.2015
comment
у него уже есть объект героя, попробуйте foreach (var hero1 в hero.result.heroes) - person Feras Salim; 24.06.2015
comment
Я заметил это и уже внес изменения. Веб-сайт загружается, и именно здесь появляется ошибка сервера. Я думаю, мне нужно внести еще несколько изменений в код. Я так понимаю, что когда var проходит через массив json или (через синтаксический анализ), он превращает каждый элемент в объект, верно? Как вы думаете, мне понадобится другой метод? Общедоступная статическая асинхронная задача? Я видел это раньше в подобном контексте. Я не знаю, что он делает, но я почитаю/посмотрю несколько видео об этом. - person warboss; 24.06.2015
comment
Две вещи: вы включили свой ключ API в сообщение, и я провел простое тестирование из консольного приложения и смог перечислить json в опубликованной вами ссылке со структурой, аналогичной той, что я показал в ответ. - person willaien; 24.06.2015
comment
ну, я вернулся домой и решил попробовать еще раз, я подумал, что попробую в консольном приложении, то же самое, консоль просто закрылась. В любом случае, я решил вернуться к веб-форме и попробовать еще раз, и это просто начать работать! Я не мог в это поверить. Раньше я думал про себя, что все логично, должно работать. Я до сих пор не знаю, почему я получаю эти ошибки - биззаре, но большое спасибо, Уиллайен, я очень ценю вашу помощь. Я собираюсь прочитать больше об этом материале, чтобы я мог получить четкое представление о нем и стать лучшим программистом. - person warboss; 24.06.2015