A List inside an ExpandoObject

Dave Mateer picture Dave Mateer · Oct 20, 2011 · Viewed 12k times · Source
dynamic model = new ExpandoObject();
model.Data = "asdf";

List<dynamic> listOfx = new List<dynamic>();
for (int i = 0; i < 3; i++) {
    dynamic x = new ExpandoObject();
    x.ID = i;
    x.Name = "test" + i.ToString();
    listOfx.Add(x);
}
model.listOfx = listOfx;

When I run this, I can see Data inside model, but not listOfx.

Problem: how to get a list(or IEnumerable) inside an ExpandoObject

UPDATE on Solution: enter image description here

Because I couldn't see the lifOfx in the locals window I thought it wasn't working. Here (through y) you can see it is. :-)

Answer

sehe picture sehe · Oct 20, 2011

I can't reproduce similar issues on Mono 2.10:

using System.Dynamic;
using System.Collections.Generic;

using System;

public class Program
{
    public static void Main(string[] args)
    {
        dynamic x = new ExpandoObject();
        x.Data ="test";
        x.Arr = new [] { "test1","test2"};
        x.Lst = new List<string> { "aap", "noot", "mies" };

        Console.WriteLine(string.Join(", ", x.Arr));
        Console.WriteLine(string.Join(", ", x.Lst));
    }
}

Output:

/tmp @ dmcs test.cs && mono test.exe
test1, test2
aap, noot, mies

I'll be retesting on windows shortly.

Update have tested the following:

  • the linux-compiled (dmcs) binary run on Windows with Mono 2.10: OK
  • the linux-compiled (dmcs) binary run on Windows with MS.NET 4.0: OK
  • the windows-compiled (dmcs) binary run on Windows with Mono 2.10: OK
  • the windows-compiled (dmcs) binary run on Windows with MS.NET 4.0: OK
  • the windows-compiled (csc.exe) binary run on Windows with Mono 2.10: OK
  • the windows-compiled (csc.exe) binary run on Windows with MS.NET 4.0: OK

On linux I have only tested the binary compiled by mono itself, but I don't anticipate any problems. Perhaps there is something subtly different about storing dynamics inside the List<>, I'll test that now