2011-11-07 1 views
9

Tôi đang deserializing một chuỗi JSON thành một đối tượng. Tôi không thể sử dụng Dictionary<string, string> vì bên trong JSON phức tạp. Tôi biết về số Dictionary<string, dynamic>, nhưng tôi đã qua khuôn khổ .NET 3.5, vì vậy tôi không thể sử dụng dynamic.Deserializing JSON vào đối tượng

Vì vậy, tôi đã kết thúc ở đây:

object json = new JavaScriptSerializer().Deserialize<object>("myjson"); 

Nhưng tôi thấy không có cách nào để truy cập json mà không suy nghĩ. Có lời khuyên nào không?

+0

Tôi không quen thuộc với miền này vì vậy tôi xin lỗi nếu đây là câu hỏi ngớ ngẩn ... nhưng tại sao bạn không thể sử dụng sự phản chiếu để truy cập 'json.html'? –

+1

Tôi có thể sử dụng, nhưng tôi nghĩ nếu bạn thấy mình sử dụng sự phản chiếu ở giữa thứ gì đó tầm thường, bạn đang làm điều gì sai. Trong trường hợp này, tôi nghĩ Im. –

Trả lời

14

Tôi sẽ sử dụng ServiceStack.Text và phân tích cú pháp bằng JsonObject.Parse.

Sau đó, bạn có từ điển dữ liệu dễ đọc.

ServiceStack là nhanh hơn và tốt hơn hơn Json.NET.

1

JSON.NET là một thư viện serialization phổ biến JSON, nó cho phép bạn serialize đánh máy của bạn đối tượng to/from JSON cũng như có được cơ quan đại diện gõ của meta-cấu trúc (thông qua JObject class) khi bạn không biết cấu trúc của JSON của bạn.

Tôi đã tìm thấy nó tốt hơn các dịch vụ .NET đi kèm với out-of-the-box cho JSON nhiều lần.

11

Điều này có thể được thực hiện với ServiceStack's JsonSerializer dễ dàng như:

var dictionary = JsonSerializer.DeserializeFromString<Dictionary<string,string>>(myJson); 

Nó thậm chí còn ngắn gọn hơn nếu bạn sử dụng phương pháp mở rộng:

var dictionary = myJson.FromJson<Dictionary<string,string>>(); 

Nếu không nếu bạn thích, bạn có thể sử dụng API động:

var jsonObj = JsonObject.Parse(myJson); 
var value = jsonObj.Get("key"); 

Dưới đây là một số cách sử dụng thực tế cho thấy sự khác biệt t cách bạn có thể deserialize một JSON tải trọng động:

Như một phần thưởng bạn sẽ được sử dụng .NET's fastest JSON serializer :)

Json Serializer ServiceStack được cũng có thể tải xuống trên NuGet với:

PM> Install-Package ServiceStack.Text 
+0

Hi Demis, Tôi có một vài câu hỏi 1. Để phân tích cú pháp các tệp json lớn có tùy chọn phân tích cú pháp Json trực tuyến có sẵn không? 2. Khi Json được nhúng bên trong khung vuông [], việc phân tích cú pháp thất bại là có phương pháp nào có sẵn để ghi đè nó không? – Gokul

+0

1) Không.2) Tôi không hiểu ví dụ này, nhưng tất cả các chuỗi phân tích + các tùy chỉnh có sẵn trên 'JsConfig' và' JsConfig ' – mythz

+0

Cảm ơn bạn, Demis. Tôi nhận được lỗi sau "SerializationException: Loại định nghĩa nên bắt đầu với một '{', mong đợi serialized loại 'RootObject', có chuỗi bắt đầu với:]" khi cố gắng phân tích đối tượng json hiện tại [Link-đây] (http: // pastebin.com/WZTSbYNJ). Khi tôi xóa ký tự đầu tiên trong tệp [và ký tự cuối cùng] trong tệp, thì tôi có thể phân tích cú pháp thành công. – Gokul