Reputation: 6626
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:
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. :-)
Upvotes: 5
Views: 16925
Reputation: 564433
The code you have, above, works perfectly well for setting up the list. For example, adding this after your code will work fine:
// Access value inside list
Console.WriteLine(model.listOfx[1].Name);
// Iterate through list
foreach (var o in model.listOfx)
{
Console.WriteLine(o.ID);
}
For example, try the following (fully functional example):
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
public static class Test
{
public static void Main()
{
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;
// Access value inside list
Console.WriteLine(model.listOfx[1].Name);
// Iterate through list
foreach (var o in model.listOfx)
{
Console.WriteLine(o.ID);
}
Console.ReadKey();
}
}
This uses your exact sample code.
Upvotes: 4
Reputation: 393084
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:
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
Upvotes: 4
Reputation: 7183
The ExpandoObject supports IDictionary. You can cast it such as
IDictionary myModel =(IDictionary)Model;
So then you can iterate it.
Upvotes: 0