【发布时间】:2018-10-18 09:10:35
【问题描述】:
所以我目前正在尝试反序列化 JSON API。 我正在使用与其他 API 成功使用的代码相同的代码。 但是每个变量都只返回 0。
public class RootObject
{
public int lat { get; set; }
public int lon { get; set; }
public DateTime date_iso { get; set; }
public int date { get; set; }
public double value { get; set; }
}
public class UVGetter
{
public static async Task<RootObject> UVApiProxy(double lat, double lon)
{
var Timestamp = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
var http = new HttpClient();
string WeatherApiKey = "secret";
var url = String.Format($"https://api.openweathermap.org/data/2.5/uvi/history?appid=" + WeatherApiKey + "&lat=" + Math.Round(lat) + "&lon=" + Math.Round(lon) + "&start=" + Timestamp + "&end=" + Timestamp);
var response = await http.GetAsync(url);
var result = await response.Content.ReadAsStringAsync();
var serializer = new DataContractJsonSerializer(typeof(RootObject));
var ms = new MemoryStream(Encoding.UTF8.GetBytes(result));
var uvdata = (RootObject)serializer.ReadObject(ms);
Agara.Program.WeatherApiCalls++;
Console.WriteLine(uvdata.lat + "\n" + uvdata.lon + "\n" + uvdata.date_iso.ToString() + "\n" + uvdata.date + "\n" + uvdata.value);
return uvdata;
}
}
结果是这样的
[{"lat":54,"lon":9,"date_iso":"2018-05-08T12:00:00Z","date":1525780800,"value":5.62}]
并且变量(例如 uvdata.lat)只包含零,尽管 API 信息应该存储在这些变量中。
【问题讨论】:
-
我推荐使用Json Nuget。易于使用和良好的错误处理。