C#的匿名对象的定义如下:
1 | object obj=new {Field1=1,Field2=2}; |
动态对象ExpandoObject的使用方法如下:
1 | dynamic obj= new ExpandoObject(); |
匿名对象在声明的时候就必须所需要的属性都进行定义,定义后就不能再增加了,也就是下面这种用法是不行的:
1 | object obj=new {Field1=1,Field2=2}; |
编译会出错。这是因为匿名对象的实质仍然是对象,与一般的类没有区别。
ExpandoObject则不同,实质上ExpandoObject可以转换为IDictionary<string,object>,是字典,可进行属性添加。
以上区别在MVC Controller中返回Json对象时可以看出。下面的代码:
1 | public JsonResult GetData() |
如果访问这个Action,返回的json对象是{”Field1”:”1”,”Field2”:”2”}
如果用ExpandObject:
1 | public JsonResult GetData() |