我也正在从超出了我的控制API调用返回了以下JSON对象:使用RestSharp到deserialise 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
},
...
]
}
我已经在尝试将其deserialise到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; }
}
我想它使用RestSharp,指定rootElement的为GetBusinessGroupsRestResult
到deserialise。当尝试使用RestSharp的IRestResponse<T> Execute<T>(RestRequest)
,我收到以下错误deserialisation:
System.InvalidCastException: Unable to cast object of type 'RestSharp.JsonArray' to type 'System.Collections.Generic.IDictionary`2[System.String,System.Object]'.
我已经成功地从deserialise此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; }
}
任何人都可以在正确的方向指向我吗?谢谢!
当你看到解决方案时,它非常有意义!谢谢!我应该注意到在我的实现中,我使用一个包装函数创建了'RestRequest',这个包装函数设置了'RootElement'属性(例如在这里指的是'GetBusinessGroupsRestResult') - 对于像AcquireSecurityTokenRest这样需要的其他API调用,会导致反序列化失败,为了使[DeserializeAs(Name =“GetBusinessGroupsRestResult”)]注释具有所需的效果,我必须将'RootElement'设置为'null'。 –