2013-05-14 11 views
11

Ich habe eine Webanforderung, die die Serverdaten im Format application/x-www-form-urlencoded sendet. Ich möchte es in application/json konvertieren.Was sind einige Optionen zum Konvertieren von Url-codierten Formulardaten zu JSON in. NET

Beispiel:

URL-codierte Formulardaten:

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 

Ziemlich Version:

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

Die obigen Daten auf die folgende JSON-Daten konvertiert werden muss:

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

Frage:

Gibt es kostenlose Tools, die diese dazu in der Lage sind? Ich habe selbst nichts gefunden und wenn es sie gibt, würde ich sie lieber konsumieren als selbst zu schreiben, aber wenn es dazu kommt, werde ich es tun.

Eine C# /. Net-Lösung ist bevorzugt.

Antwort

17

Ich habe eine Dienstprogrammklasse zum Parsen von Abfragezeichenfolgen und Formulardaten geschrieben. Es ist erhältlich unter:

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

Beispiel:

// 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); 

Lassen Sie mich wissen, ob es für Sie arbeitet.

+2

Danke für das Teilen! Ich werde es mir ansehen. Ich konnte nicht glauben, dass ich die erste Person da draußen war, die das tun musste. Ich bin froh, dass ich nicht alleine bin. – Dan

6

Das .NET Framework 4.5 enthält alles, was Sie zum Konvertieren von URL-codierten Formulardaten in JSON benötigen. Um dies zu tun, müssen Sie in Ihrem C# -Projekt einen Verweis auf den Namespace System.Web.Extension hinzufügen. Danach können Sie die Klasse JavaScriptSerializer verwenden, die Ihnen alles bietet, was Sie für die Konvertierung benötigen.

Der Kodex

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(); 
     } 
    } 
} 

Der Ausgang

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

Hinweis: Die Ausgabe enthält keine Zeilenumbrüche oder alle Formatierungen

Quelle: How do I convert a querystring to a json string?

+0

Die von Ihnen eingegebene Ausgabe stimmt * nicht * mit meiner erforderlichen Ausgabe überein. – Dan

+0

@Dan: Allerdings, wenn Sie sich entscheiden, Ihre eigenen zu schreiben, wäre dies ein guter Ausgangspunkt. es wäre wahrscheinlich ziemlich einfach, dies zu erweitern, um Ihren Anforderungen zu entsprechen. – caesay

+0

@Dan: Du hast recht, das ist nicht genau das, was du wolltest. Es tut mir leid, aber die generierte Ausgabe ist gültig json. – MUG4N