将Json String反序列化为Object

时间:2016-06-15 13:36:12

标签: c# json json-deserialization

我正在尝试从json在线获取天气数据,然后将json反序列化为我可以使用的对象。这是我的代码:

public static RootObject7 GetWeather7(int zip)
    {
        var url = "http://api.weatherunlocked.com/api/forecast/us." + zip.ToString() + "?app_id=xxxxxxx&app_key=xxxxxxxxxxxxxxxxxxxxxxx";
        var weather = new wunlocked();
        string json = weather.getJson(url);
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        var data = (RootObject7)serializer.Deserialize<RootObject7>(json);
        return data;
    }
private string getJson(string url)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        try
        {
            WebResponse response = request.GetResponse();
            using (Stream responseStream = response.GetResponseStream())
            {
                StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
                return reader.ReadToEnd();
            }
        }
        catch (WebException ex)
        {
            WebResponse errorResponse = ex.Response;
            using (Stream responseStream = errorResponse.GetResponseStream())
            {
                StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
                String errorText = reader.ReadToEnd();
            }
            throw;
        }
    }

我正在调试,正在发生的是我正在创建的RootObject7数据对象,并且里面有一个“预测”对象,它应该包含其他信息的列表,但它是空的。我已经定义了所有类(它们很长,所以如果它很重要,我会发布它们,否则我认为不需要)。我之前从未做过这样的事情,因此大部分内容来自我发现的其他代码示例,但显然我没有正确地将它们放在一起,因为我的对象总是为null但是当我转到url时,那里有有效的xml。我不确定我是否需要以某种方式将xml转换为我的代码中的json,或者是否以某种方式完成?就像我说的,我真的不知道我在做什么,但如果有人有建议,那就太好了。

1 个答案:

答案 0 :(得分:0)

尝试

dynamic data = serializer.Deserialize(json);

然后检查调试器中的数据对象 - 您可能不需要反序列化到固定接口以获取所需的数据。使用动态也可能是一个更强大的解决方案来处理可能使设置的接口/对象更脆弱的服务升级。