C# – Lookup nested field in ExpandoObject at runtime

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;


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s