2011-02-09 10 views
5

Tôi cần điều hướng một cấu trúc Json vì tôi sẽ điều hướng một XML bằng cách sử dụng XmlDocument.Làm cách nào để điều hướng bất kỳ cây JSON nào trong C#?

Cấu trúc không được biết và tôi cần phải lặp qua các nút để phân tích cú pháp một số dữ liệu.

Điều này có khả thi không?
Tôi biết tôi có thể sử dụng JavaScriptSerializer để deserialize nó thành một loại được biết đến, nhưng đây không phải là trường hợp như tôi có thể nhận được bất kỳ json hợp lệ.

Tôi đang sử dụng .NET 3.5 (SP1) và không thể nâng cấp lên 4.0 tại thời điểm này.
tôi nâng cấp lên .NET 4.0 để sử dụng các loại năng động (được khiếp sợ làm code)

+0

có thể trùng lặp với [Parse JSON in C#] (http://stackoverflow.com/questions/1212344/parse-json-in-c) – Jason

+3

@ Jason, đây không phải là bản sao, tôi đặc biệt nói rằng tôi không ' Tôi biết cấu trúc nên tôi không thể deserilize nó thành một loại đã biết. – juan

+0

Phải; câu hỏi được liên kết tập trung vào JSON.NET, không phải JavaScriptSerializer. Trước đây cho phép bạn đi bộ và kiểm tra cấu trúc kết quả, sau đó là cho các loại tĩnh. – Jason

Trả lời

3

Đọc bài viết này:

Nó giải thích cho bạn một cách phân tích cú pháp JSON để một đối tượng động có từ điển bên trong.

Vì vậy, việc lặp lại từ điển sẽ tốt đẹp với LINQ, sẽ không?

--- HOẶC NẾU BẠN ĐANG TRÊN. NET 3.5 ... ---;)

Tại sao bạn không triển khai phương pháp mở rộng như "ToDictionary"?

Bạn có thể nhận văn bản JSON, sau đó phân tích cú pháp với cụm từ thông dụng và thuộc tính và giá trị chia nhỏ thành từ điển, mọi thứ được thực hiện bằng phương pháp tiện ích được đề xuất.

Một ví dụ về làm thế nào nó sẽ làm việc đó:

IDictionary<string, object> deserializedJson = jsonText.ToDictionary(); 

Phù hợp với nhu cầu của bạn?

--- EVEN YET KHÁM PHÁ TRY (bây giờ bạn có nhiều tùy chọn hơn)! ---

Kiểm tra này dự án mã nguồn mở trên CodePlex:

Nó có LINQ-to-JSON để bạn có thể đọc và viết JSON.

+0

Tôi quên nói rằng tôi đang sử dụng .NET 3.5 (Chỉnh sửa: Nhưng tôi có thể sử dụng điều đó JavaScriptConverter thingy, tôi sẽ thử nó) – juan

+0

Ooops !! Vâng, tôi sẽ cập nhật câu trả lời của tôi –

+0

Kiểm tra cập nhật của tôi! –