2013-05-14 21 views
11

Ho una richiesta Web che sta inviando i dati del server nel formato application/x-www-form-urlencoded. Vorrei convertirlo in application/json.Quali sono alcune opzioni per convertire i dati modulo codificati dall'URL in JSON in .Net

Esempio:

codifica URL dati forma:

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 

versione Piuttosto:

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

deve essere convertito ai seguenti dati JSON I dati di cui sopra:

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

Domanda:

Esistono strumenti gratuiti che sono in grado di fare questo? Non sono stato in grado di trovarlo da solo e se esistono, preferisco consumarli piuttosto che scriverne uno anch'io, ma se si arriva a quello, lo farò.

È preferibile una soluzione C# /.

risposta

17

Ho scritto una classe di utilità per analizzare stringhe di query e dati di modulo. E 'disponibile presso:

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

Esempio:

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

farmi sapere se funziona per voi.

+2

Grazie per la condivisione! Lo guarderò. Non potevo credere di essere la prima persona là fuori che doveva farlo. Sono contento di non essere solo. – Dan

6

.NET Framework 4.5 include tutto il necessario per convertire i dati del modulo con codifica url in JSON. Per fare ciò devi aggiungere un riferimento allo spazio dei nomi System.Web.Extension nel tuo progetto C#. Successivamente è possibile utilizzare la classe JavaScriptSerializer che fornisce tutto ciò che è necessario per eseguire la conversione.

Il Codice

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

L'uscita

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

Avviso: L'uscita non contiene interruzioni di linea o di qualsiasi formattazione

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

+0

L'output che hai incluso * non * corrisponde al mio output richiesto. – Dan

+0

@Dan: tuttavia, se decidi di scriverlo, questo sarebbe un buon punto di partenza. probabilmente sarebbe abbastanza facile estenderlo per soddisfare le tue esigenze. – caesay

+0

@Dan: hai ragione, non è esattamente quello che volevi. Mi dispiace, ma l'output generato è valido JSON. – MUG4N