Search code examples
c#.netdynamicexpandoobject

Assign the literal string as a property of a dynamic object during runtime and access it


How can I assign the fieldname of a sqldatareader during runtime dynamically to a dynamic object?

Lets assume I have read the fieldname of a SqlDataReader into a variable:

string sqlDataReaderFieldNameStringVariable  = reader.GetName(index);

I can not say:

dynamic dyn = new ExpandoObject();
dyn.sqlDataReaderFieldNameStringVariable = "test";

How can I do that?

UPDATE:

still time to get a point ;-) I add my dyn object to a List of type ExpandoObject which is the return value of a method. When I access the list via data[0].test property does not exist while compile time ???

When I do this outside of the method returning the List:

dynamic bla = (ExpandoObject)data[0];
            String shit = bla.Name;

Why do I have to cast it? Any workaround? Thanks Jon.


Solution

  • You have to cast your ExpandoObject dyn to IDictionary<string, object> first to do that:

    dynamic dyn = new ExpandoObject();
    var dynDict = dyn as IDictionary<string, object>;
    dynDict[sqlDataReaderFieldNameStringVariable] = "test";