Dictionary<string, object>
и Dictionary<string, dynamic>
- это те же типы, что и для среды выполнения.
Например, это работает:
var dynDic =new Dictionary<string,object>{ {"test", 1}}
as Dictionary<string,dynamic>;
int value = dynDic["test"];
Итак, если ваши первые работы:
var json = new JavaScriptSerializer { }
.DeserializeObject(@"{array:['item1','item2']}")
as Dictionary<string, object>;
тогда так и должно быть:
var json = new JavaScriptSerializer { }
.DeserializeDynamic(@"{array:['item1','item2']}")
as Dictionary<string, dynamic>;
Но тогда:
foreach (var item in json["array"])
strings.Add(item as string);
не использует динамический вызов, поэтому он компилирует то же самое, независимо от того, был ли элемент var
object
или dynamic
, поэтому, если у вас возникли проблемы, я предполагаю, что он использует dynamic
.
То же правило применяется к object[]
и dynamic[]
, они одного типа, вы можете свободно приводить между ними, когда вы приводите, вы просто говорите компилятору, как использовать object
s из этого массива.
dynamic[] dynArr = new object[]{1};
Таким образом, ответ таков: все, что будет десериализовано до Dictionary<string,object>
или object[]
, может использоваться как Dictionary<string,dynamic>
или dynamic[]