Я пытаюсь десериализовать свой объект JSON и передать его в качестве модели для своего представления. Поскольку я не знаю, какими свойствами будет обладать модель, я прочитал, что должен использовать ExpandoObject.
Вот что я пробовал:
public ActionResult Index()
{
var myObj = new object();
List<Dictionary<string, object>> container = new List<Dictionary<string, object>>()
{
new Dictionary<string, object> { { "Text", "Hello world" } }
};
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
myObj = json_serializer.DeserializeObject(json_serializer.Serialize(container));
return View(myObj.ToExpando());
}
И в том же пространстве имен я определил этот класс:
public static class Helpers
{
public static ExpandoObject ToExpando(this object anonymousObject)
{
IDictionary<string, object> anonymousDictionary = new RouteValueDictionary(anonymousObject);
IDictionary<string, object> expando = new ExpandoObject();
foreach (var item in anonymousDictionary)
expando.Add(item);
return (ExpandoObject)expando;
}
}
И, на мой взгляд, у меня есть этот цикл:
@foreach (var item in Model)
{
@item.Text
}
Когда я запускаю, я получаю эту ошибку:
«System.Collections.Generic.KeyValuePair» не содержит определения «Текст».
После отладки модель не имеет общедоступных свойств. Когда я смотрю вглубь закрытых членов, я вижу нужные мне данные.
Почему эти общедоступные свойства не таковы, чтобы я мог получить к ним доступ?
Изменить: здесь вы можете увидеть объектную модель Expando, которая передается моему представлению:
Примечание. Похоже, что свойство SyncRoot
содержит мой объект.
Изменить: это десериализованный объект:
obj
в моем последнем обновлении)? По сути, я думаю, что мне нужен рекурсивный ExpandoObject. сейчас погуглю... - person user1477388   schedule 01.08.2014