2012-04-30 48 views
11

Tôi hoàn thành mới với C# và tôi đã cho bản thân mình một nhức đầu. Tôi biết điều này có thể là trẻ em công cụ cho bạn, nhưng tôi đã dành một giờ + googleing xung quanh và dường như không thể làm việc nó ra.làm thế nào để chuyển đổi mảng với các khóa/giá trị thành JSON C#

Tất cả những gì tôi đang cố làm là chuyển đổi mảng thành JSON. Tôi biết PHP tốt, vì vậy đây là một ví dụ về những gì tôi đang cố gắng để làm gì (trong PHP):

$myarr=array("key1"=>"value for key 1","key2"=>"value for key 2"); 

$jsonArray=json_encode($myarr); 

nên $jsonArray sẽ là: {"key1":"value for key 1","key2":"value for key 2"}

Bây giờ, tôi đang cố gắng để làm chính xác điều đó, nhưng trong C#.

Đây là những gì tôi có cho đến nay:

String[] keys = new String[] { "emailSend","toEmail"}; 
String[] values = new String[] {textBox2.Text,textBox1.Text}; 
JavaScriptSerializer js = new JavaScriptSerializer(); 
string json = js.Serialize(keys);//final json result 
MessageBox.Show(json);//show me 

Tôi đang sử dụng Visual Studio C# 2010, mà là ném lỗi này (với mã ở trên):

The type or namespace name 'JavaScriptSerializer' could not be found (are you missing a using directive or an assembly reference?)

Bất kỳ ý tưởng về những gì tôi đang làm sai ở đây? Cảm ơn

Trả lời

27

Có vẻ như bạn không có tuyên bố chính xác using? Thêm dòng sau vào phía trên cùng của tập tin của bạn:

using System.Web.Script.Serialization;

EDIT: Để có được JSON định dạng đúng, sử dụng một Dictionary thay vì:

var keyValues = new Dictionary<string, string> 
       { 
        { "emailSend", textBox1.Text }, 
        { "toEmail", textBox2.Text } 
       }; 

JavaScriptSerializer js = new JavaScriptSerializer(); 
string json = js.Serialize(keyValues); 
MessageBox.Show(json); 
+4

Đây là trong System.Web.Extensions.dll trong trường hợp bạn không có nó nạp như một tài liệu tham khảo (ví dụ, một winforms hoặc WPF dự án sẽ không có nó theo mặc định). Bạn có thể chọn sử dụng một cái gì đó như [fastJSON] (http://www.codeproject.com/Articles/159450/fastJSON). Sắp xếp các đối tượng thậm chí còn dễ dàng hơn và nhanh hơn sử dụng JavaScriptSerializer. – erodewald

+1

Bây giờ tôi nhận được lỗi: 'Loại hoặc tên không gian tên 'Kịch bản' không tồn tại trong không gian tên 'System.Web' (bạn đang thiếu một tham chiếu lắp ráp?)' Cảm ơn xD –

+1

@nav_nav Hmm, lạ. Bạn đang sử dụng trước .NET 3.5? – mattytommo

14

thế nào về việc sử dụng JSON.NET và JObject lớp học?

var obj = new JObject(); 

obj["One"] = "Value One"; 
obj["Two"] = "Value Two"; 
obj["Three"] = "Value Three"; 

var serialized = JsonConvert.SerializeObject(obj); 

mang đến cho bạn

{"One":"Value One","Two":"Value Two","Three":"Value Three"} 
+1

Với điều đó, tôi nhận được: 'Không thể tìm thấy loại tên hoặc không gian tên 'JObject' (bạn thiếu một chỉ thị sử dụng hoặc tham chiếu assembly?)' Và 'Tên 'JsonConvert' không tồn tại trong ngữ cảnh hiện tại ' –

+2

bạn đã thêm thư viện json.net chưa? -> http://json.codeplex.com/ – MUG4N

+0

Trong trường hợp không tìm thấy * JObject *, bạn cần thêm 'using Newtonsoft.Json.Linq;' thư viện. – Fil

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