The first issue I discovered: Your sample suffers from unbalanced brackets:
After "connections": [
comes no closing ]
Anyways, it is doable:
...using a dynamic object like that:
dynamic values = JsonConvert.DeserializeObject<dynamic>(json);
var ip = values.devices[""].sessions[0].connections[0].ip;
...with a custom class definitions as shown below:
public class RootObject
{public string user_id { get; set; }
public Dictionary<string, Devices> devices { get; set; }
}
public class Devices
{
public List<Session> sessions { get; set; }
}
public class Session
{
public List<Connections> connections { get; set; }
}
public class Connections
{
public string ip { get; set; }
public string user_agent { get; set; }
public long last_seen { get; set; }
}
So, the Devices Key is an empty string - but that's fine.
Try it live here.
Output:
Deserializing json...
Success!
Device Key #:
Device Value #: Devices
IP #: 225.225.225.225 (just a sample sub-property)
using System;
using Newtonsoft.Json;
using System.Collections.Generic;
Full code:
public class Program
{
public static void Main()
{
string json = @"{
""user_id"": ""something_name"",
""devices"": {
"""": {
""sessions"": [
{
""connections"": [
{
""ip"": ""225.225.225.225"",
""user_agent"": ""something"",
""last_seen"": 1504266816737
}
]
}
]
}
}
}";
Console.WriteLine("Deserializing json...");
//dynamic values = JsonConvert.DeserializeObject<dynamic>(json);
//var ip = values.devices[""].sessions[0].connections[0].ip;
RootObject o = JsonConvert.DeserializeObject<RootObject>(json, new JsonSerializerSettings
{
MissingMemberHandling = MissingMemberHandling.Ignore,
NullValueHandling = NullValueHandling.Ignore //these settings are not important here
});
Console.WriteLine("Success!");
foreach (var dev in o.devices)
{
Console.WriteLine(" Device Key #: {0}", dev.Key);
Console.WriteLine(" Device Value #: {0}", dev.Value);
Console.WriteLine(" IP #: {0}", dev.Value.sessions[0].connections[0].ip);
}
}
}
public class RootObject
{public string user_id { get; set; }
public Dictionary<string, Devices> devices { get; set; }
}
public class Devices
{
public List<Session> sessions { get; set; }
}
public class Session
{
public List<Connections> connections { get; set; }
}
public class Connections
{
public string ip { get; set; }
public string user_agent { get; set; }
public long last_seen { get; set; }
}