C # Как получить данные из JSON - PullRequest
0 голосов
/ 24 января 2019

У меня есть данные JSON, которые я получаю от своего веб-сервиса, проблема в том, что я сейчас пытаюсь получить данные вне квадратной скобки, потому что мои текущие коды могут только получить данные weather.

И всякий раз, когда я пытаюсь получить данные от coord, он возвращает мне значение 0.

 {  
       "coord":{  
          "lon":145.77,
          "lat":-16.92
       },
       "weather":[  
          {  
             "id":802,
             "main":"Clouds",
             "description":"scattered clouds",
             "icon":"03n"
          }
       ],
       "base":"stations",
       "main":{  
          "temp":300.15,
          "pressure":1007,
          "humidity":74,
          "temp_min":300.15,
          "temp_max":300.15
       },
       "visibility":10000,
       "wind":{  
          "speed":3.6,
          "deg":160
       },
       "clouds":{  
          "all":40
       },
       "dt":1485790200,
       "sys":{  
          "type":1,
          "id":8166,
          "message":0.2064,
          "country":"AU",
          "sunrise":1485720272,
          "sunset":1485766550
       },
       "id":2172797,
       "name":"Cairns",
       "cod":200
    }

Это мой текущий код, я пытаюсь получить данные из фигурной скобки coord, но он продолжает давать 0. Любая помощь будет признательна, спасибо!

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

    }

    public class Result
    {
        public string id{ get; set; }
        public string main{ get; set; }
        public string description{ get; set; }
        public string icon{ get; set; }
        public decimal lon{ get; set; }

    }

    public class SearchList
    {
        public int resultCount;
        public Result[] weather;
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        string searchTerm = TextBox1.Text;
        var webRequest = (HttpWebRequest)WebRequest.Create
        ("http://samples.openweathermap.org/data/2.5/weather?id=2172797&appid=b6907d289e10d714a6e88b30761fae22");
        var webResponse = (HttpWebResponse)webRequest.GetResponse();
        if (webResponse.StatusCode == HttpStatusCode.OK)
        {
            JavaScriptSerializer json = new JavaScriptSerializer();
            StreamReader sr = new StreamReader(webResponse.GetResponseStream());
            string resString = sr.ReadToEnd();
            SearchList list = json.Deserialize<SearchList>(resString);
            GridView1.DataSource = list.weather;
            GridView1.DataBind();
        }
        else
            Label1.Text = "Invalid Response";
    }
}

Ответы [ 4 ]

0 голосов
/ 24 января 2019

используйте JObject, тогда вы можете извлечь каждый токен, используя

`Jobject.SelectToken("datayouwant")`.
0 голосов
/ 24 января 2019

Ваши модели неполные.Вы можете использовать JsonCsharp для генерации классов.

public class Coord
{
    public double lon { get; set; }
    public double lat { get; set; }
}

public class Weather
{
    public int id { get; set; }
    public string main { get; set; }
    public string description { get; set; }
    public string icon { get; set; }
}

public class SearchList
{
    public Coord coord { get; set; }
    public List<Weather> weather { get; set; }
    public int resultCount;
}
0 голосов
/ 24 января 2019

Вам нужно добавить модель для coord

public class SearchList
{
    public Coord coord;
    public int resultCount;
    public Result[] weather;
}

public class Coord 
{
    public double lon;
    public double lat;
}

Вам нужно будет добавить больше моделей для каждого типа данных.Вы не можете просто получить доступ к list.coord.lon из list.weather.lon

0 голосов
/ 24 января 2019

Вы смогли получить данные о погоде только потому, что они были определены в объектной модели.

Обновление SearchList определения класса для включения других желаемых данных

public class SearchList {
    public Position coord { get; set; }
    public int resultCount { get; set; }
    public Result[] weather { get; set; }
}

public class Position {  
    public double lon { get; set; }
    public double lat { get; set; }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...