Serializing Json C# trong UWP

Tôi có một API như sau

http://api.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid=2de143494c0b295cca9337e1e96b00e0


{"coord":{"lon":138.93,"lat":34.97},"weather":[{"id":800,"main":"Clear","description":"Sky is Clear","icon":"01n"}],"base":"stations","main":{"temp":279.45,"pressure":1018,"humidity":20,"temp_min":279.26,"temp_max":279.82},"wind":{"speed":0.51,"deg":40,"gust":1.03},"clouds":{"all":0},"dt":1451390210,"sys":{"type":3,"id":10354,"message":0.0088,"country":"JP","sunrise":1451339482,"sunset":1451374868},"id":1851632,"name":"Shuzenji","cod":200}

MainPage


<StackPanel Background="HotPink">;
<Button Content="Get Weather" Click="Button_Click"/>;
<TextBlock Name="ResultTextBox"/>;
< /StackPanel>;

Sử dụng http://json2csharp.com/ để biến đổi json thành class được


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 Main
{
 public double temp { get; set; }
 public int pressure { get; set; }
 public int humidity { get; set; }
 public double temp_min { get; set; }
 public double temp_max { get; set; }
}

public class Wind
{
 public double speed { get; set; }
 public int deg { get; set; }
 public double gust { get; set; }
}

public class Clouds
{
 public int all { get; set; }
}

public class Sys
{
 public int type { get; set; }
 public int id { get; set; }
 public double message { get; set; }
 public string country { get; set; }
 public int sunrise { get; set; }
 public int sunset { get; set; }
}

public class RootObject
{
 public Coord coord { get; set; }
 public List&lt;Weather&gt; weather { get; set; }
 public string @base { get; set; }
 public Main main { get; set; }
 public Wind wind { get; set; }
 public Clouds clouds { get; set; }
 public int dt { get; set; }
 public Sys sys { get; set; }
 public int id { get; set; }
 public string name { get; set; }
 public int cod { get; set; }
}

Tạo Class OpenWeatherMapProxy.cs để xử lý các dữ liệu từ API

Copy đoạn code phía trên vào class và thêm

[DataContract]

[DataMember]

Sử dụng thư viện

using System.Runtime.Serialization;

Ta được


public class OpenWeatherMapProxy
{

}
[DataContract]
 public class Coord
 {
 [DataMember]
 public double lon { get; set; }
 [DataMember]
 public double lat { get; set; }
 }

 [DataContract]
 public class Weather
 {
 [DataMember]
 public int id { get; set; }
 [DataMember]
 public string main { get; set; }
 [DataMember]
 public string description { get; set; }
 [DataMember]
 public string icon { get; set; }
 }
 [DataContract]
 public class Main
 {
 [DataMember]
 public double temp { get; set; }
 [DataMember]
 public int pressure { get; set; }
 [DataMember]
 public int humidity { get; set; }
 [DataMember]
 public double temp_min { get; set; }
 [DataMember]
 public double temp_max { get; set; }
 }
 [DataContract]
 public class Wind
 {
 [DataMember]
 public double speed { get; set; }
 [DataMember]
 public int deg { get; set; }
 [DataMember]
 public double gust { get; set; }
 }
 [DataContract]
 public class Clouds
 {
 [DataMember]
 public int all { get; set; }
 }
 [DataContract]
 public class Sys
 {
 [DataMember]
 public int type { get; set; }
 [DataMember]
 public int id { get; set; }
 [DataMember]
 public double message { get; set; }
 [DataMember]
 public string country { get; set; }
 [DataMember]
 public int sunrise { get; set; }
 [DataMember]
 public int sunset { get; set; }
 }
 [DataContract]
 public class RootObject
 {
 [DataMember]
 public Coord coord { get; set; }
 [DataMember]
 public List<Weather> weather { get; set; }
 [DataMember]
 public string @base { get; set; }
 [DataMember]
 public Main main { get; set; }
 [DataMember]
 public Wind wind { get; set; }
 [DataMember]
 public Clouds clouds { get; set; }
 [DataMember]
 public int dt { get; set; }
 [DataMember]
 public Sys sys { get; set; }
 [DataMember]
 public int id { get; set; }
 [DataMember]
 public string name { get; set; }
 [DataMember]
 public int cod { get; set; }
 }

Sử lý phương thức GetWeather


public class OpenWeatherMapProxy
{
public async static Task<RootObject> GetWeather(double lat,double lon)
{
var http = new HttpClient();
var response = await http.GetAsync("http://api.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid=2de143494c0b295cca9337e1e96b00e0");
var result = await response.Content.ReadAsStringAsync();
var serializer = new DataContractJsonSerializer(typeof(RootObject));
var ms = new MemoryStream(Encoding.UTF8.GetBytes(result));
var data = (RootObject)serializer.ReadObject(ms);
return data;
}
}

 

 

Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s