反序列化JSON

时间:2019-01-22 03:14:56

标签: c# json rest

我正在为我的学校项目设计一个使用C#和Web服务的Web应用程序。我认为学校教材中提供了一个代码,我认为该代码适用于我的代码,但未显示结果。

这是来自API的JSON的一部分:

{
   "id": 550,
   "overview": "A ticking-time-bomb insomniac and a slippery soap salesman channel primal male aggression into a shocking 

   "title": "Fight Club",
}

我正在使用TMDB中的api填充gridview或listview。我已经尝试使用我的scl给出的代码,并将其修改为我的要求。但它不起作用。当我处于调试模式时,我能够查看json数据。但数据不会绑定到电影列表。

public class movies

 {
   public string title { get; set; }
   public string overview { get; set; }
   public int id { get; set; }


 }

public class movielist
{
  public int resultCount;
   public movies[] movielists;
  // public List<movies> movieslists { get; set; } //just tried this
}

protected void Page_Load(object sender, EventArgs e)
{
    var webRequest = (HttpWebRequest)WebRequest.Create("https://api.themoviedb.org/3/trending/movie/week?api_key={api key}");
    var webResponse = (HttpWebResponse)webRequest.GetResponse();
    if (webResponse.StatusCode == HttpStatusCode.OK)
    {
        JavaScriptSerializer json = new JavaScriptSerializer();
        StreamReader sr = new StreamReader(webResponse.GetResponseStream());
        string resString = sr.ReadToEnd();//there is JSON here
        movielist list = json.Deserialize<movielist>(resString);// is always null istead of the JSON

        GridView1.DataSource = list.movielists;
        GridView1.DataBind();

    }
    else
    {
        errortxt.Text = "invalid";
    }
}

预期的输出是要用接收到的数据填充GridView1的结果。 movielist变为null而不是填充。我可以打开resString中的json。

1 个答案:

答案 0 :(得分:0)

当Json反序列化器返回null时,这是因为Json与代码中的模型不匹配。这可能是由于区分大小写或其他一些原因。

您可以解决以下问题:

  1. 将Json文本复制到剪贴板。
  2. 在Visual Studio中,转到“编辑”->“选择性粘贴”->“将JSON作为类粘贴”。
  3. 使用自动生成的类型反序列化。

您的对象现在应该正确反序列化。

通常,您应该能够根据自己的喜好重命名自动生成类的根对象

但是,要修改自动生成的代码中的其他任何内容,将需要使用custom deserializerattributes自定义来覆盖特定成员的设置。