序列化异常:意外字符'<'

时间:2017-04-29 17:25:46

标签: c# api weather

我有这个简单的方法,假设得到天气数据,当我调用它时会发生这样的错误:

  

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;
}

2 个答案:

答案 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; } 之外,它创建它很好 我只是删除了那个,我的代码现在工作得很好。谢谢大家的支持。