Tôi thực sự thích ExpandoObject
trong khi biên dịch một đối tượng động phía máy chủ trong thời gian chạy, nhưng tôi gặp sự cố khi làm phẳng điều này trong quá trình tuần tự hóa JSON. Đầu tiên, tôi khởi tạo đối tượng:
dynamic expando = new ExpandoObject();
var d = expando as IDictionary<string, object>;
expando.Add("SomeProp", SomeValueOrClass);
Càng xa càng tốt. Trong bộ điều khiển MVC của tôi, sau đó tôi muốn gửi nó xuống dưới dạng JsonResult, vì vậy tôi thực hiện điều này:
return new JsonResult(expando);
Điều này tuần tự hóa JSON thành bên dưới, sẽ được trình duyệt sử dụng:
[{"Key":"SomeProp", "Value": SomeValueOrClass}]
NHƯNG, điều tôi thực sự muốn là thấy điều này:
{SomeProp: SomeValueOrClass}
Tôi biết tôi có thể đạt được điều này nếu tôi sử dụng dynamic
thay vì ExpandoObject
- JsonResult
có thể tuần tự hóa các dynamic
thuộc tính và giá trị thành một đối tượng duy nhất (không có nghiệp vụ Khóa hoặc Giá trị), nhưng lý do tôi cần sử dụng ExpandoObject
là vì tôi không biết tất cả các thuộc tính tôi muốn trên đối tượng cho đến thời gian chạy và theo như tôi biết, tôi không thể thêm động một thuộc tính vào a dynamic
mà không sử dụng an ExpandoObject
.
Tôi có thể phải sàng lọc kinh doanh "Chìa khóa", "Giá trị" trong javascript của mình, nhưng tôi đã hy vọng tìm ra điều này trước khi gửi nó cho khách hàng. Cảm ơn bạn đã giúp đỡ!