如何在“动态”对象(使用dynamic关键字声明的对象)中修改和预定成员/嵌入数组

时间:2013-12-04 10:39:12

标签: c# arrays json generics dynamic

我有:

dynamic dObj = System.Web.Helpers.Json.Decode(contentsOfJsonFile) // returns dynamic..

其中:

dObj.title // is a flat sting
dObj.description // is a flat sting
dObj.tags // is an array! ["videos", "pictures", "other assets"]

现在在动态变量中,如何修改嵌入式数组?

当我访问dObj.tags [0]时,它返回字符串值。但是当我这样做时:

Json.Encode(dObj) // array unplugged, object empty

它丢失了嵌入式阵列的空白。即使我不修改任何东西,它仍然会丢失嵌入式阵列。我试图将它转换为泛型:

List<string> list = (List<string>)dObj.tags;

但它引发了一个例外:

  

“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”的类型的第一次机会异常

问题:

如何修改动态对象的成员数组,以便在调用Json.Encode(dObj)时保持更改?

1 个答案:

答案 0 :(得分:2)

解码后执行此调整:

dObj.tags = new List<dynamic>( dObj.tags );

尽管有这种打嗝,但System.Web.Helpers.Json的动态对象的序列化和反序列化比JSON.NET快一点。