2013-05-14 61 views
11

Tôi có một yêu cầu web đang gửi dữ liệu máy chủ có định dạng application/x-www-form-urlencoded. Tôi muốn chuyển đổi nó thành application/json.Một số tùy chọn để chuyển đổi dữ liệu biểu mẫu được mã hóa url thành JSON là gì .Net

Ví dụ:

URL mã hóa dưới dạng dữ liệu:

Property1=A&Property2=B&Property3%5B0%5D%5BSubProperty1%5D=a&Property3%5B0%5D%5BSubProperty2%5D=b&Property3%5B1%5D%5BSubProperty1%5D=c&Property3%5B1%5D%5BSubProperty2%5D=d 

Khá phiên bản:

Property1=A 
Property2=B 
Property3[0][SubProperty1]=a 
Property3[0][SubProperty2]=b 
Property3[1][SubProperty1]=c 
Property3[1][SubProperty2]=d 

Các dữ liệu trên cần phải được chuyển đổi sang các dữ liệu JSON sau:

{ 
    Property1: "A", 
    Property2: "B", 
    Property3: [ 
     { SubProperty1: "a", SubProperty2: "b" }, 
     { SubProperty1: "c", SubProperty2: "d" }] 
} 

Câu hỏi:

Có công cụ miễn phí nào có khả năng thực hiện việc này không? Tôi đã không thể tìm thấy bất kỳ bản thân mình và nếu họ tồn tại, tôi muốn tiêu thụ chúng hơn là viết một bản thân mình, nhưng nếu nói đến điều đó, tôi sẽ.

Giải pháp Net C# /.

Trả lời

17

Tôi đã viết một lớp tiện ích để phân tích chuỗi truy vấn và dữ liệu biểu mẫu. Nó có sẵn tại địa chỉ:

https://gist.github.com/peteroupc/5619864

Ví dụ:

// Example query string from the question 
String test="Property1=A&Property2=B&Property3%5B0%5D%5BSubProperty1%5D=a&Property3%5B0%5D%5BSubProperty2%5D=b&Property3%5B1%5D%5BSubProperty1%5D=c&Property3%5B1%5D%5BSubProperty2%5D=d"; 
// Convert the query string to a JSON-friendly dictionary 
var o=QueryStringHelper.QueryStringToDict(test); 
// Convert the dictionary to a JSON string using the JSON.NET 
// library <http://json.codeplex.com/> 
var json=JsonConvert.SerializeObject(o); 
// Output the JSON string to the console 
Console.WriteLine(json); 

Hãy cho tôi biết nếu nó làm việc cho bạn.

+2

Cảm ơn bạn đã chia sẻ! Tôi sẽ xem xét nó. Tôi không thể tin rằng tôi là người đầu tiên ra khỏi đó mà cần thiết để làm điều này. Tôi vui vì tôi không đơn độc. – Dan

6

.NET Framework 4.5 bao gồm mọi thứ bạn cần để chuyển đổi dữ liệu biểu mẫu được mã hóa url thành JSON. Để làm điều này, bạn phải thêm một tham chiếu đến không gian tên System.Web.Extension trong dự án C# của bạn. Sau đó bạn có thể sử dụng lớp JavaScriptSerializer cung cấp cho bạn mọi thứ bạn cần để thực hiện chuyển đổi.

Bộ luật

using System.Web; 
using System.Web.Script.Serialization; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var dict = HttpUtility.ParseQueryString("Property1=A&Property2=B&Property3%5B0%5D%5BSubProperty1%5D=a&Property3%5B0%5D%5BSubProperty2%5D=b&Property3%5B1%5D%5BSubProperty1%5D=c&Property3%5B1%5D%5BSubProperty2%5D=d"); 
      var json = new JavaScriptSerializer().Serialize(
                dict.Keys.Cast<string>() 
                 .ToDictionary(k => k, k => dict[k])); 

      Console.WriteLine(json); 
      Console.ReadLine(); 
     } 
    } 
} 

Các Output

{ 
    "Property1":"A", 
    "Property2":"B", 
    "Property3[0][SubProperty1]":"a", 
    "Property3[0][SubProperty2]":"b", 
    "Property3[1][SubProperty1]":"c", 
    "Property3[1][SubProperty2]":"d" 
} 

Thông báo: Kết quả không chứa xuống hàng hoặc bất kỳ định dạng

Nguồn: How do I convert a querystring to a json string?

+0

Đầu ra bạn đã bao gồm * không * khớp với đầu ra yêu cầu của tôi. – Dan

+0

@Dan: tuy nhiên, nếu bạn quyết định viết của riêng bạn thì đây sẽ là điểm khởi đầu tốt. nó có thể sẽ được khá dễ dàng để mở rộng này để phù hợp với yêu cầu của bạn. – caesay

+0

@Dan: Bạn nói đúng, đây không phải là điều bạn muốn. Tôi xin lỗi vì điều đó, nhưng đầu ra được tạo ra là json hợp lệ. – MUG4N

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