我有一个非常不受欢迎的情况,它要求我反序列化JSON.NET中值为字段名的JSON。假设我有以下的JSON这是非常正确的结构:反序列化JSON.NET中值为字段名称的JSON
{
"name": "tugberk",
"roles": [
{ "id": "1", "name": "admin" },
{ "id": "2", "name": "guest" }
]
}
它很容易与JSON.NET反序列化这CLR对象:
class Program
{
static void Main(string[] args)
{
var camelCaseSettings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() };
var text = File.ReadAllText("user_normal.txt");
var obj = JsonConvert.DeserializeObject<User>(text, camelCaseSettings);
}
}
public class User
{
public string Name { get; set; }
public Role[] Roles { get; set; }
}
public class Role
{
public int Id { get; set; }
public string Name { get; set; }
}
然而,在我目前的情况下,我具有以下可怕JSON其等同于上述的在JSON值方面:
{
"name": "tugberk",
"roles": {
"1": { "name": "admin" },
"2": { "name": "guest" }
}
}
正如你可以看到,roles
字段不是阵列;它是一个包含其他值作为对象的唯一键作为其字段名称的对象(这太可怕了)。使用JSON.NET将此JSON反序列化到User
类的最佳方法是什么?