通过字符串将属性添加到动态对象

时间:2013-05-28 22:09:12

标签: c# wcf c#-4.0 dynamic reflection

我有以下定义:

public class cell : DynamicObject {

}

[DataContract]
public class rows {
  [DataMember]
   public List<cell> rows;
}

稍后在代码中我做了:

dynamic dtCell = new cell();

我需要每次都能创建不同名称的属性。所以我能够得到json:

{ color: 'red', category: 'car'} or { country: 'US', city: 'Tampa', county: '...', ... }

如何为动态对象创建属性,就像在javascript或类似内容中向字典添加属性一样。

我试过:dtCell.GetType().GetProperty('city')正如我在几个帖子中找到的那样,对象返回的是null

当我这样做时:

dtCell.GetType().GetProperty('city').SetValue(dtCell, 'Tampa', null)

我得到例外:dtCell.GetType().GetProperty("CustomerId").SetValue(dtCell, 3, null)' threw an exception of type 'System.Reflection.TargetInvocationException' dynamic {System.Reflection.TargetInvocationException}

帮助表示赞赏!!!

1 个答案:

答案 0 :(得分:2)

您可以使用Dictionary来代替DynamicObject。例如,

Dictionary<string, string> dict = new Dictionary<string, string>()
{
    {"country","US"},  {"city","Tampa"},  {"county","..."}
};

var json = new JavaScriptSerializer().Serialize(dict);

会给{"country":"US","city":"Tampa","county":"..."}

也可以使用匿名类

var obj = new { color = "red", category = "car" };
var json2 = new JavaScriptSerializer().Serialize(obj);