2011-10-21 42 views
6

Tôi đang sử dụng thư viện simplejson từ đây: http://simplejson.codeplex.com/Net simplejson: Deserialize JSON để đối tượng năng động

Tôi muốn deserialize một chuỗi JSON để một đối tượng năng động như thế này:

dynamic json = SimpleJson.SimpleJson.DeserializeObject("{\"foo\":\"bar\"}"); 

var test = json.foo; 

Phần deserialization hoạt động đúng, nhưng gọi json.foo ném một RuntimeBinderException với thông báo lỗi 'SimpleJson.JsonObject' does not contain a definition for 'foo'.

Làm cách nào để có thể deserialize chuỗi JSON bằng SimpleJson và truy cập các thuộc tính động bằng cú pháp json.foo?

Trả lời

9

Vâng, đó chỉ là vấn đề đọc mã nguồn cho SimpleJson. :-) Một dòng cần phải được uncommented để hỗ trợ cú pháp động mà tôi đang tìm kiếm. Bạn không chắc chắn tại sao tính năng này không được bật theo mặc định.

Từ mã nguồn:

// NOTE: uncomment the following line to enable dynamic support. 
//#define SIMPLE_JSON_DYNAMIC 
+2

Đó là một nhận xét công bằng, L.B. Tôi không thể xóa các câu hỏi, vì vậy hy vọng điều này sẽ phục vụ như là một tạo tác hữu ích cho những người khác cài đặt SimpleJson thông qua NuGet và chạy vào cùng một vấn đề như tôi đã làm. –

+1

+1 để giúp ích cho tôi. –

2

Nhìn vào mẫu, JsonObject thuộc tính được truy cập như từ điển. Vì vậy, thay vì json.foo, bạn sẽ cần json["foo"].

Bạn thực sự tệ hơn khi sử dụng dynamic tại đây, vì không có gì năng động về nó: phương thức trả về JsonObject, chỉ đơn giản là không có thành viên foo. Nếu bạn không sử dụng dynamic, bạn có thể đã nhận được thông báo lỗi đó lúc biên dịch.

Nếu bạn xem liên kết L.B. cung cấp, nó cho thấy làm thế nào để thực hiện chức năng này năng động mình.

1

> csc/t: thư viện/d: SIMPLE_JSON_DYNAMIC SimpleJson.cs

Các vấn đề liên quan