Hi I am developing web application in c#. I have one JSON object. I am trying to de-serialize the object as below. Below is my result.
[ {
"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
}
]
Below are my models.
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; }
}
Below is my model class.
public partial class Models
{
public List<string> Name { get; set; }
}
I am trying to assign name array from the models.
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]
};
}
This is throwing error saying:
cannot implicit convert type newtonsoft.json.linq.jtoken to system.generic.list
Can someone help me to fix this issue?
Use a tool like json2csharp to generate your model:
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; }
}
Now you can deserialize your json like this:
var obj = JsonConvert.DeserializeObject<Resource[]>(json);
If you want to stick with your current code you can do so by casting the JToken
while assigning it to the Name
property:
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>>()
};
}
You could try to Convert your JSON to an dynamic
and then loop over those values as following: dynamic obj = JsonConvert.DeserializeObject(JSON);
Another option is to make your Objects have the same structure as the 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; }
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.