我有这个简单的方法,假设得到天气数据,当我调用它时会发生这样的错误:
System.Runtime.Serialization.SerializationException未被用户代码处理 的HResult = -2146233076 Message =反序列化UWpWeather.RootObject类型的对象时出错。遇到了意想不到的字符'<'。
public async static Task <RootObject> GetWeather(double lat, double lng) {
var http = new HttpClient();
var response = await http.GetAsync("http://api.openweathermap.org/data/2.5/forecast/daily?q=leeds&type=accurate&mode=xml&units=metric&cnt=3&appid= MY AIP-KEY");
string 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;
}
答案 0 :(得分:1)
API 不尊重您在请求中传递的任何HTTP内容或Accept标头,而是根据查询字符串参数设置响应的内容类型。
您的初始网址:
http://api.openweathermap.org/data/2.5/forecast/daily?q=leeds&type=accurate&mode=的 XML 强>&安培;单元=度量&安培; CNT = 3及的appid = 我的AIP-KEY&#34;
应该是什么:
http://api.openweathermap.org/data/2.5/forecast/daily?q=leeds&type=accurate&mode=的 JSON 强>&安培;单元=度量&安培; CNT = 3及的appid = 我的AIP-KEY&#34;
这应该允许您将其正确地反序列化为RootObject
。
警告:我没有你的根对象实现,因此我只能在获得JSON格式的响应之前进行验证。
答案 1 :(得分:0)
我找到了答案,我的第一个错误是在调用我的数据时使用Xml而不是Json。第二,当我使用这个网站( json2csharp )将Json转换为代表我的Json的一系列类时,除了创建为列表的public List<List> list { get; set; }
之外,它创建它很好
我只是删除了那个,我的代码现在工作得很好。谢谢大家的支持。