Мне действительно нравится 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
в один объект (без использования ключа или значения), но причина, по которой мне нужно использовать ExpandoObject
, заключается в том, что я не знаю всех свойств, которые мне нужны для объекта, до времени выполнения , и, насколько я знаю, я не могу динамически добавить свойство в dynamic
без использования ExpandoObject
.
Возможно, мне придется проанализировать бизнес "Ключ", "Ценность" в моем javascript, но я надеялся выяснить это до отправки его клиенту. Спасибо за вашу помощь!