2012-03-06 51 views
25

Có ai biết làm thế nào để chuyển đổi một chuỗi có chứa json vào một mảng C#. Tôi có điều này mà đọc văn bản/json từ một webBrowser và lưu nó vào một chuỗi.Chuyển đổi json thành mảng C#?

string docText = webBrowser1.Document.Body.InnerText; 

Chỉ cần bằng cách nào đó thay đổi chuỗi json đó thành một mảng. Được nhìn vào Json.NET nhưng tôi không chắc chắn nếu đó là những gì tôi cần, vì tôi không muốn thay đổi một mảng thành json; nhưng ngược lại. Cảm ơn đã giúp đỡ!

+0

Chuỗi của bạn không phải là mảng, nó cũng có thể là băm. Và một mảng của những gì? Chuỗi của bạn trông như thế nào và bạn muốn kết quả là gì? Bạn đang cố gắng đạt được điều gì. –

+0

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

Trả lời

45

chỉ mất chuỗi và sử dụng JavaScriptSerializer để deserialize nó thành một đối tượng bẩm sinh. Ví dụ, có json này:

string json = "[{Name:'John Simith',Age:35},{Name:'Pablo Perez',Age:34}]"; 

Bạn sẽ cần phải tạo ra một lớp C# gọi, ví dụ, người được xác định như vậy:

public class Person 
{ 
public int Age {get;set;} 
public string Name {get;set;} 
} 

Bây giờ bạn có thể deserialize chuỗi JSON thành một mảng của Người bằng cách thực hiện:

JavaScriptSerializer js = new JavaScriptSerializer(); 
Person [] persons = js.Deserialize<Person[]>(json); 

Đây là link to JavaScriptSerializer documentation.

Lưu ý: mã của tôi ở trên không được kiểm tra nhưng đó là ý tưởng Đã kiểm tra. Trừ khi bạn đang làm một cái gì đó "kỳ lạ", bạn nên sử dụng JavascriptSerializer.

+0

Cảm ơn! Bạn có biết JavascriptSerializer không gian tên sử dụng không? Nhận được lỗi 'không thể tìm thấy'. –

+0

Có, trên tài liệu tôi đã liên kết. Đó là trong System.Web.Script.Serialization. Bạn cần phải thêm một tham chiếu đến hệ thống System.Web.Extensions. – Icarus

+0

Ah, cảm ơn. Có nó hoạt động. Hãy nghĩ rằng nó 'JavaScriptSerializer' không 'JavascriptSerializer' mặc dù. Đó là lý do tại sao tôi đã nhận được lỗi đó. Bạn có thể muốn chỉnh sửa điều đó. :) –

5

Có, Json.Net là những gì bạn cần. Bạn về cơ bản muốn deserialize một chuỗi Json thành một mảng của objects.

Xem their examples:

string myJsonString = @"{ 
    "Name": "Apple", 
    "Expiry": "\/Date(1230375600000+1300)\/", 
    "Price": 3.99, 
    "Sizes": [ 
    "Small", 
    "Medium", 
    "Large" 
    ] 
}"; 

// Deserializes the string into a Product object 
Product myProduct = JsonConvert.DeserializeObject<Product>(myJsonString); 
2
using Newtonsoft.Json; 

Cài đặt lớp này trong gói giao diện điều khiển Lớp này hoạt động tốt trong tất cả các phiên bản .NET, ví dụ như trong dự án của tôi: Tôi có DNX 4.5.1 và DNX CORE 5.0 và mọi thứ hoạt động.

Thứ nhất trước JSON deserialization, bạn cần phải khai báo một lớp để đọc bình thường và lưu trữ một số dữ liệu ở đâu đó Đây là lớp học của tôi:

public class ToDoItem 
{ 
    public string text { get; set; } 
    public string complete { get; set; } 
    public string delete { get; set; } 
    public string username { get; set; } 
    public string user_password { get; set; } 
    public string eventID { get; set; } 
} 

Trong HttpContent phần mà bạn yêu cầu dữ liệu theo yêu cầu GET ví dụ:

HttpContent content = response.Content; 
string mycontent = await content.ReadAsStringAsync(); 
//deserialization in items 
ToDoItem[] items = JsonConvert.DeserializeObject<ToDoItem[]>(mycontent); 
Các vấn đề liên quan