嗨,我正在用C#开发Web应用程序。我有一个JSON对象。我正在尝试反序列化对象,如下所示。以下是我的结果。
[ {
"id": "ce053195-ae48-4457-bb88-6ca32f236bd1",
"model": {
"objectId": [
"c760d95e-3fcb-43d1-a7db-111d3384ecbc"
],
"name": [
"Device1-Configuration"
]
},
"childs": 0,
"access": 0,
"allow": 0
},
{
"id": "42ad8eb6-9f35-447c-8ea0-e1346dee410c",
"model": {
"objectId": [
"c760d95e-3fcb-43d1-a7db-111d3384ecbc"
],
"name": [
"Device1-DeviceModel"
]
},
"childs": 1,
"access": 0,
"allow": 0
}
]
下面是我的模特。
public partial class Resource
{
public System.Guid Id { get; set; }
public Models Model { get; set; }
public bool Selected { get; set; }
public bool hasChildren { get; set; }
public bool IsAllowed { get; set; }
}
下面是我的模型课。
public partial class Models
{
public List<string> Name { get; set; }
}
我正在尝试从模型中分配名称数组。
foreach (JObject singScopeRes in result)
{
var permission = new Rbac.BusinessEntities.V2.Resource();
permission.Id = new Guid(singScopeRes["id"].ToString());
permission.Model = new Rbac.BusinessEntities.V2.Models()
{
Name= singScopeRes["model"]["name"][0]
};
}
这将引发错误:
不能将类型newtonsoft.json.linq.jtoken隐式转换为system.generic.list
有人可以帮助我解决此问题吗?
答案 0 :(得分:4)
使用json2csharp之类的工具来生成模型:
var i = E5KDAQ.E5K_GetRunTimeOS();
现在您可以像这样反序列化json:
public class Model
{
public List<string> objectId { get; set; }
public List<string> name { get; set; }
}
public class Resource
{
public string id { get; set; }
public Model model { get; set; }
public int childs { get; set; }
public int access { get; set; }
public int allow { get; set; }
}
如果要坚持使用当前代码,可以通过在将var obj = JsonConvert.DeserializeObject<Resource[]>(json);
属性分配给JToken
属性的同时投射Name
来实现:
foreach (JObject singScopeRes in result)
{
var permission = new Rbac.BusinessEntities.V2.Resource();
permission.Id = new Guid(singScopeRes["id"].ToString());
permission.Model = new Rbac.BusinessEntities.V2.Models()
{
Name = (singScopeRes["model"]["name"]).ToObject<List<string>>()
};
}
答案 1 :(得分:0)
您可以尝试将JSON转换为dynamic
,然后如下遍历这些值:dynamic obj = JsonConvert.DeserializeObject(JSON);
另一种选择是使您的对象具有与JSON相同的结构。
public class Model
{
public List<string> objectId { get; set; }
public List<string> name { get; set; }
}
public class Resource
{
public string id { get; set; }
public Model model { get; set; }
public int childs { get; set; }
public int access { get; set; }
public int allow { get; set; }
}