gpt4 book ai didi

c# - 将 JSON 反序列化为 C# 对象以在网格中将嵌套数组显示为字符串

转载 作者:太空宇宙 更新时间:2023-11-03 20:54:52 25 4
gpt4 key购买 nike

一切正常,反序列化正常。除了角色显示为 System.Collections.Generic.List`1[System.String]

问题

如果我想将每个字段附加到一个网格。有没有一种方法可以将集合显示为字符串而不循环遍历 Roles 属性?

JSON

[{
"Name":"test",
"Email": "test@test.com",
"Roles": ["Admin","User","Guest"],
"Age":"23"
},
{
"Name":"test1",
"Email": "test1@test.com",
"Roles": ["Admin", "User" ,"Guest"],
"Age":"33"
}]

模型

public class example
{
public string Name { get; set; }
public string Email { get; set; }
public IList<string> Roles { get; set; }
public string Age { get; set; }
}

反序列化

List<Exampe> list = JsonConvert.DeserializeObject<List<Exampe>>(bundle);

最佳答案

正如@Nkosi 提到的,这是一个 XY 问题。问题不在于反序列化,而在于 DataGridView 如何处理“复杂”属性类型。

您可以添加一个新属性来显示它:

  • 要么直接修改类定义:

    public class Example
    {
    public string Name { get; set; }
    public string Email { get; set; }
    public string[] Roles { get; set; }
    public string Age { get; set; }

    public string RolesText => string.Join(", ", Roles ?? Array.Empty<string>());
    }
  • 或者通过更改 DataGridViewDataSource:

    dgv.DataSource = list.Select(x => new
    {
    x.Name, x.Email, x.Age,
    Roles = string.Join(", ", x.Roles ?? Array.Empty<string>()),
    }).ToList();

--

奖励:这是第二种方法的生成器:

string GenerateModelFormatter<T>()
{
return new StringBuilder()
.AppendLine("x => new")
.AppendLine("{")
.AppendLine(string.Join(",\n", typeof(T).GetProperties()
.Select(x => x.PropertyType != typeof(string[])
? $"\t{x.Name} = x.{x.Name}"
: $"\t{x.Name} = string.Join(\", \", x.{x.Name} ?? Array.Empty<string>())")))
.AppendLine("}")
.ToString();
}

关于c# - 将 JSON 反序列化为 C# 对象以在网格中将嵌套数组显示为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51547311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com