¿Cómo puedo deserializar un objeto hijo con nombres de teclas dynamics (numéricos)?

¿Cómo puedo deserializar estos datos JSON? Las teclas “100034” etc. son de naturaleza dinámica.

{ "users" : { "100034" : { "name" : "tom", "state" : "WA", "id" : "cedf-c56f-18a4-4b1" }, "10045" : { "name" : "steve", "state" : "NY", "id" : "ebb2-92bf-3062-7774" }, "12345" : { "name" : "mike", "state" : "MA", "id" : "fb60-b34f-6dc8-aaf7" } } } 

¿Hay alguna manera de que pueda acceder directamente a cada objeto que tenga nombre, estado e Id?

Para los objetos JSON que tienen nombres de propiedad que pueden variar, puede usar un Dictionary en lugar de una clase regular, donde T es una clase que representa los datos del elemento.

Declara tus clases así:

 class RootObject { public Dictionary users { get; set; } } class User { public string name { get; set; } public string state { get; set; } public string id { get; set; } } 

Luego deserializa así:

 RootObject obj = JsonConvert.DeserializeObject(json); 

Manifestación:

 class Program { static void Main(string[] args) { string json = @" { ""users"": { ""10045"": { ""name"": ""steve"", ""state"": ""NY"", ""id"": ""ebb2-92bf-3062-7774"" }, ""12345"": { ""name"": ""mike"", ""state"": ""MA"", ""id"": ""fb60-b34f-6dc8-aaf7"" }, ""100034"": { ""name"": ""tom"", ""state"": ""WA"", ""id"": ""cedf-c56f-18a4-4b1"" } } }"; RootObject root = JsonConvert.DeserializeObject(json); foreach (string key in root.users.Keys) { Console.WriteLine("key: " + key); User user = root.users[key]; Console.WriteLine("name: " + user.name); Console.WriteLine("state: " + user.state); Console.WriteLine("id: " + user.id); Console.WriteLine(); } } } 

Salida:

 key: 10045 name: steve state: NY id: ebb2-92bf-3062-7774 key: 12345 name: mike state: MA id: fb60-b34f-6dc8-aaf7 key: 100034 name: tom state: WA id: cedf-c56f-18a4-4b1 
  1. Agregue un paquete System.Web.Script.Serialization;

  2. Suponiendo que su JSON contiene la lista de usuarios de Internet, creo una clase como esta.

     public class internet { public List Users { get; set; } }; public class User { public String Name { get; set; } public String Id { get; set; } public String State { get; set; } }; 

Asumiendo que su Cadena JSON está en la variable ‘JSONDATA’, siga el siguiente código para DE serializar sus datos JSON a los objetos de Clase.

  var JSONDATA = /* Your JSON String */; JavaScriptSerializer serializer = new JavaScriptSerializer(); internet Intr = serializer.Deserialize(JSONDATA);