将这个json反序列化为什么是正确的C#结构?

时间:2016-01-08 04:17:09

标签: c# json serialization

我从一个http中获取json,我正在尝试将其反序列化为一个C#对象并且它一直返回为null,所以我的猜测是我的数据结构已关闭。这是我的代码:

    results = httpClient.GetStringAsync(url).Result;

    var restResponse = new RestSharp.RestResponse();
    restResponse.Content = results;
    var deserializer = new JsonDeserializer();
    var page = _deserializer.Deserialize<Tree>(restResponse);

这是Json:

{
   "page":{
      "results":[
         {
            "id":"144111690",
            "type":"page",
            "status":"current",
            "title":"Title 1"
         },
         {
            "id":"157540319",
            "type":"page",
            "status":"current",
            "title":"Title 2"
         },
         {
            "id":"144082624",
            "type":"page",
            "status":"current",
            "title":"Title 3"
         }
      ],
      "start":0,
      "limit":25,
      "size":14
   }
}

以下是我的C#对象:

 public class Tree
{
    public Results page { get; set; }
}

public class Results
{
    public ResultDetails results { get; set; }
}

public class ResultDetails
{
    public List<PageInfo> Pages { get; set; }
}

public class PageInfo
{
    public long id { get; set; }
    public string type { get; set; }
    public string status { get; set; }
    public string title { get; set; }
}

任何人都可以建议什么不是&#34;排队&#34;这里吗?

3 个答案:

答案 0 :(得分:3)

为什么不使用Visual studio直接创建类结构..这将为您提供与json匹配的类结构。

您可以在此处查看如何生成:Visual Studio Generate Class From JSON or XML

复制你json&gt;&gt;视觉工作室编辑菜单&gt;选择性粘贴&gt;&gt;将Json粘贴为类

enter image description here

答案 1 :(得分:2)

这将有效:

public class Tree
{
    public Page page { get; set; }
}

public class Page
{
    public List<Result> results { get; set; }
    public int start { get; set; }
    public int limit { get; set; }
    public int size { get; set; }
}

public class Result
{
    public string id { get; set; }
    public string type { get; set; }
    public string status { get; set; }
    public string title { get; set; }
}

results是JSON中的数组,但您将其定义为对象(ResultDetails

答案 2 :(得分:0)

这可能会为你做到这一点

public class Rootobject
{
    [JsonProperty("page")]
    public Page page { get; set; }
}

public class Page
{
    [JsonProperty("results")]
    public Result[] results { get; set; }
    [JsonProperty("start")]
    public int start { get; set; }
    [JsonProperty("limit")]
    public int limit { get; set; }
    [JsonProperty("size")]
    public int size { get; set; }
}

public class Result
{
    [JsonProperty("id")]
    public string id { get; set; }
    [JsonProperty("type")]
    public string type { get; set; }
    [JsonProperty("status")]
    public string status { get; set; }
    [JsonProperty("title")]
    public string title { get; set; }
}

实施应该是

results = httpClient.GetStringAsync(url).Result;

var restResponse = new RestSharp.RestResponse();
restResponse.Content = results;
var deserializer = new JsonDeserializer();
var page = _deserializer.Deserialize<Rootobject>(restResponse);