For JSON objects having property names which can vary, you can use a Dictionary<string, T>
in place of a regular class, where T
is a class representing the item data.
Declare your classes like this:
class RootObject
{
public Dictionary<string, User> users { get; set; }
}
class User
{
public string name { get; set; }
public string state { get; set; }
public string id { get; set; }
}
Then deserialize like this:
RootObject obj = JsonConvert.DeserializeObject<RootObject>(json);
Demo:
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<RootObject>(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();
}
}
}
Output:
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
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…