如何在C#中反序列化JSON数组

15 浏览
0 Comments

如何在C#中反序列化JSON数组

大家好,我正在使用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 Name { get; set; }
}

我正在尝试从模型中分配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"][0].ToString()
    };
}

这报错说:

无法隐式将类型Newtonsoft.Json.Linq.JToken转换为System.Generic.List

有人可以帮我解决这个问题吗?

0
0 Comments

问题的出现原因是在C#中反序列化JSON数组时出现了类型转换错误。解决方法是使用适当的类型转换或使用Visual Studio生成的模型进行反序列化。以下是解决方法的详细说明:

首先,可以使用类似json2csharp的工具生成模型。根据给定的JSON,生成的模型如下:

public class Model
{
    public List objectId { get; set; }
    public List 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; }
}

然后,可以使用JsonConvert.DeserializeObject方法将JSON反序列化为指定的类型(Resource[])。

var obj = JsonConvert.DeserializeObject(json);

如果想继续使用现有的代码,可以通过将JToken强制转换为相应的类型来解决类型转换错误。

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>()
    };
}

如果仍然遇到类型转换错误,可以尝试使用Visual Studio的功能来生成模型。将JSON复制到Visual Studio中,然后选择"Edit -> Paste Special -> Paste JSON as Classes"。这将在Visual Studio中生成模型代码。但需要注意的是,生成的代码中使用了数组而不是列表。

以上是解决问题的方法。希望对你有所帮助。

0
0 Comments

问题的原因是在将JSON数组反序列化为C#对象时,出现了无法将对象转换为字符串的错误。解决方法有两种:

方法一:将JSON转换为dynamic对象,然后循环遍历值。代码如下:

dynamic obj = JsonConvert.DeserializeObject(JSON);
foreach(var item in obj)
{
    // do something with item
}

方法二:使C#对象的结构与JSON相同。代码如下:

public class Model
{
    public List objectId { get; set; }
    public List 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; }
}

如果在foreach循环中出现异常,请检查异常的位置。如果异常发生在foreach循环中,则需要将该部分代码删除,因为已经通过反序列化完成了填充。

0