序列化异常:意外字符“ <”

kha*_*efa 5 c# api weather

我有一个简单的方法,它想获取天气数据,当我称它为错误时:

用户代码HResult = -2146233076未处理System.Runtime.Serialization.SerializationException,该消息=反序列化了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;
}
Run Code Online (Sandbox Code Playgroud)

Yan*_*eus 1

API 不接受您在请求中传递的任何 HTTP 内容或 Accept 标头,而是根据查询字符串参数设置响应的内容类型。

您的初始网址:

http://api.openweathermap.org/data/2.5/forecast/daily?q=leeds&type=accurate&mode= xml &units=metric&cnt=3&appid= 我的 AIP-KEY"

它应该是什么:

http://api.openweathermap.org/data/2.5/forecast/daily?q=leeds&type=accurate&mode= json &units=metric&cnt=3&appid= 我的 AIP-KEY"

这应该允许您将其反序列化到RootObject正确的位置。

警告:我没有您的根对象实现,因此我只能进行验证,直到返回 JSON 格式的响应。