Мне очень нравится 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
.
Мне, возможно, придется просеивать бизнес "Key", "Value" в своем javascript, но я надеялся выяснить это до отправки его клиенту. Спасибо за вашу помощь!