一切正常,然后反序列化确定。除了角色以外,其他信息都显示为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);
答案 0 :(得分:2)
正如@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>());
}
或通过更改DataSource
中的DataGridView
:
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();
}
答案 1 :(得分:1)
您的班级有两次Name
-您可能想要:
public class example
{
public string Name { get; set; }
public string Email { get; set; }
public IList<string> Roles { get; set; }
public string Age { get; set; }
}
答案 2 :(得分:1)
如果我正确理解,您似乎想获得string[]
而不是List<string>
Roles
可以为string[]
public class Example
{
public string Name { get; set; }
public string Email { get; set; }
public string[] Roles { get; set; }
public string Age { get; set; }
}