Мне очень нравится ExpandoObject
компиляция динамического объекта на стороне сервера во время выполнения, но у меня возникают проблемы с выравниванием этого объекта во время сериализации JSON. Сначала я создаю экземпляр объекта:
dynamic expando = new ExpandoObject();
var d = expando as IDictionary<string, object>;
expando.Add("SomeProp", SomeValueOrClass);
Все идет нормально. В моем контроллере MVC я хочу отправить это как JsonResult, поэтому я делаю следующее:
return new JsonResult(expando);
Это сериализует JSON в приведенный ниже код, который будет использоваться браузером:
[{"Key":"SomeProp", "Value": SomeValueOrClass}]
НО, мне бы очень хотелось это увидеть:
{SomeProp: SomeValueOrClass}
Я знаю, что могу добиться этого, если использую dynamic
вместо ExpandoObject
- JsonResult
может сериализовать dynamic
свойства и значения в один объект (без бизнеса Key или Value), но причина, по которой мне нужно использовать, ExpandoObject
заключается в том, что я не знаю всех свойства, которые мне нужны для объекта до времени выполнения , и, насколько мне известно, я не могу динамически добавлять свойство в объект dynamic
без использования ExpandoObject
.
Возможно, мне придется просеять бизнес «Ключ» и «Ценность» в моем javascript, но я надеялся выяснить это перед отправкой клиенту. Спасибо за вашу помощь!