我有一个非常不受欢迎的情况,需要我反序列化 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
field 不是数组;它是一个对象,其中包含其他值作为对象,其唯一键作为字段名称(这太可怕了)。User
使用 JSON.NET将此 JSON 反序列化为上述类的最佳方法是什么?