C# 使用RestSharp反序列化JSON数组

C# 使用RestSharp反序列化JSON数组,c#,arrays,json,deserialization,restsharp,C#,Arrays,Json,Deserialization,Restsharp,我无法控制API调用返回的JSON对象如下: { "GetBusinessGroupsRestResult": [ { "BgId": 1, "NodeLevel": 1, "BusinessDescription": "Business Groups", "BusinessName": "Root", "nodegroupid": 2, "nodegroupname": "Root", "nodegroupdesc": "Root

我无法控制API调用返回的JSON对象如下:

{
  "GetBusinessGroupsRestResult": [
  {
    "BgId": 1,
    "NodeLevel": 1,
    "BusinessDescription": "Business Groups",
    "BusinessName": "Root",
    "nodegroupid": 2,
    "nodegroupname": "Root",
    "nodegroupdesc": "Root",
    "sorkkey": "Root",
    "Marked": 2
  },
  {
    "BgId": 2,
    "NodeLevel": 2,
    "BusinessDescription": "Business A",
    "BusinessName": "Business A",
    "ParentID": 1,
    "nodegroupid": 3,
    "nodegroupname": "Business A",
    "nodegroupdesc": "Business A",
    "sorkkey": "Business A",
    "Marked": 2
  },
  ...
 ]
}
我创建了以下类结构,试图将其反序列化为C#对象实例:

public class GetBusinessGroupsRestResult
{
    public List<BusinessGroup> BusinessGroups { get; set; }
}

public class BusinessGroup
{
    [DeserializeAs(Name = "BgId")]
    public int BusinessGroupId { get; set; }

    public int NodeLevel { get; set; }
    public string BusinessDescription { get; set; }
    public string BusinessName { get; set; }

    [DeserializeAs(Name = "ParentID")]
    public int ParentId { get; set; }

    [DeserializeAs(Name = "nodegroupid")]
    public int NodeGroupId { get; set; }

    [DeserializeAs(Name = "nodegroupname")]
    public string NodeGroupName { get; set; }

    [DeserializeAs(Name = "sorkkey")]
    public string SortKey { get; set; }

    public int Marked { get; set; }
}
我已经成功地从这个API反序列化了以前不返回列表的响应,例如:

{
  "AcquireSecurityTokenRestResult": {
    "SecurityToken": "SECURITY-TOKEN",
    "SessionLength": 600000,
    "APIVersion": "VERSION"
  }
}
使用以下POCO:

public class AcquireSecurityTokenRestResult
{
    public string SecurityToken { get; set; }
    public int SessionLength { get; set; }
    [DeserializeAs(Name = "APIVersion")]
    public string ApiVersion { get; set; }
}

有人能给我指一下正确的方向吗?谢谢大家!

设法使它工作起来。
执行
部分:

var client = new RestClient("http://localhost:3000/");
var request = new RestRequest("main", Method.GET);
var response = client.Execute<RootObject>(request);

不仅仅是一个答案,一条建议。为什么不使用Json.NET而不用RESTSharp呢


我遇到了在Json.NET中运行出色的RESTSharp问题。

当您看到解决方案时,它非常有意义!非常感谢。我应该注意到,在我的实现中,我使用一个包装函数创建了
RestRequest
,该包装函数设置
RootElement
属性(例如,在这里设置
GetBusinessGroupsRestResult
)-对于其他API调用,如
AcquireSecurityTokenRest
,这是必需的,但在这里,它会导致反序列化失败,我必须将
RootElement
设置为
null
,以便
[DeserializeAs(Name=“GetBusinessGroupsRestResult”)]
注释以达到预期效果。我选择使用RestSharp,因为它允许我在一个地方处理HTTP请求的创建和执行以及响应的反序列化。例如:
var response=client.Execute(请求)。它以一种优美、简洁的方式满足了我目前的要求。你遇到了什么样的问题?谢谢。@AdamJames如果我没有正确解释我自己,我很抱歉。我也使用RESTSharp进行调用,但一旦得到响应,我就使用Json.NET处理我收到的Json响应。我不断遇到异常,将响应反序列化到看似正确的JSON上,JSON.NET处理得很好,它也更强大、更灵活。总之,我发现它是我打电话的首选库,然后我用另一个来解释回复。谢谢你澄清这一点-我有一个Pluralsight订阅,所以我一定会关注你的课程,并记住你的方法。希望它对你有所帮助。当我同时使用这两个库时,它确实对我有帮助。
var client = new RestClient("http://localhost:3000/");
var request = new RestRequest("main", Method.GET);
var response = client.Execute<RootObject>(request);
public class RootObject
{
    public List<BusinessGroup> GetBusinessGroupsRestResult { get; set; }
}

public class BusinessGroup
{
    [DeserializeAs(Name = "BgId")]
    public int BusinessGroupId { get; set; }

    public int NodeLevel { get; set; }
    public string BusinessDescription { get; set; }
    public string BusinessName { get; set; }

    [DeserializeAs(Name = "ParentID")]
    public int ParentId { get; set; }

    [DeserializeAs(Name = "nodegroupid")]
    public int NodeGroupId { get; set; }

    [DeserializeAs(Name = "nodegroupname")]
    public string NodeGroupName { get; set; }

    [DeserializeAs(Name = "nodegroupdesc")]
    public string NodeGroupDesc { get; set; }

    [DeserializeAs(Name = "sorkkey")]
    public string SortKey { get; set; }

    public int Marked { get; set; }
}
public class GetBusinessGroupsRestResult
{
    [DeserializeAs(Name = "GetBusinessGroupsRestResult")]
    public List<BusinessGroup> BusinessGroups { get; set; }
}