say you have a JSON object like this
{
home: {
garage: {
bike: {
make: "honda"
}
}
}
}
in C# you’ve loaded the JSON into an ExpandoObject like this:
dynamic json = JsonConvert.DeserializeObject("json text above...");
to lookup a field, you can just do
var make = json.home.garage.bike.make; // "honda"
which is just great.
but what if you need to lookup fields whose names you do not know at compile time?
with the little helper i wrote you can do this:
var fieldName = "home.garage.bike.make"; // this will be resolved at runtime
var make = json.GetField(fieldName);
==================
public static object GetField(this ExpandoObject expandoObject, string path)
{
if (expandoObject == null)
return null;
var pathSegments = path.Split('.');
var lastPathSegment = pathSegments[pathSegments.Length - 1];
var cursor = (IDictionary)expandoObject;
for (int i = 0; i < pathSegments.Length - 1; i++)
{
var pathSegment = pathSegments[i];
cursor = (IDictionary)cursor[pathSegment];
}
object result = null;
cursor.TryGetValue(lastPathSegment, out result);
return result;
}
Cheers