値がJSON.NETのフィールド名であるJSONを逆シリアル化する必要がある非常に望ましくない状況があります。非常に適切に構造化された次の 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 は配列ではありません。これは、フィールド名として一意のキーを持つオブジェクトとして他の値を含むオブジェクトです (これは恐ろしいことです)。このJSONをUser
JSON.NETで上記のクラスに逆シリアル化する最良の方法は何ですか?