2013-05-14 15 views
11

mam prośbę internetową, która wysyła dane serwera, który jest w formacie application/x-www-form-urlencoded. Chciałbym przekonwertować go na application/json.Jakie są opcje do konwersji Zakodowany danych formularza do JSON w .NET

przykład:

Zakodowany postać danych:

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 

Całkiem wersja:

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

Powyższe dane musi być przekształcony w następnym danych JSON:

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

Pytanie:

Czy są jakieś darmowe narzędzia, które są w stanie to zrobić? Nie byłem w stanie znaleźć samemu, a jeśli istnieją, wolałbym je konsumować niż samemu pisać, ale jeśli o to chodzi, zrobię to.

C# /. Korzystne jest rozwiązanie netto.

Odpowiedz

17

Pisałem klasę użytkową do analizowania ciągów zapytania i dane formularza. Jest ona dostępna pod adresem:

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

Przykład:

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

Daj mi znać, jeśli działa dla Ciebie.

+2

Dziękujemy za udostępnienie! Sprawdzę to. Nie mogłem uwierzyć, że byłem pierwszą osobą, która musiała to zrobić. Cieszę się, że nie jestem sam. – Dan

6

.NET Framework 4.5 zawiera wszystko, czego potrzeba do konwersji danych z formularza url zakodowany do JSON. Aby to zrobić, musisz dodać odwołanie do przestrzeni nazw System.Web.Extension w swoim projekcie C#. Następnie możesz użyć klasy JavaScriptSerializer, która zapewnia wszystko, czego potrzebujesz do konwersji.

Kodeks

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

Wyjście

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

Wskazówka: Wyjście nie zawiera linebreaks lub jakiegokolwiek formatowania

Źródło: How do I convert a querystring to a json string?

+0

Dane wyjściowe, które uwzględniłeś * nie * są zgodne z wymaganymi danymi wyjściowymi. – Dan

+0

@ Dan: jeśli jednak zdecydujesz się napisać własną, będzie to dobry punkt wyjścia. prawdopodobnie byłoby całkiem łatwo rozszerzyć to, aby pasowało do twoich wymagań. – caesay

+0

@ Dan: Masz rację, nie jest to dokładnie to, czego chciałeś. Przykro mi z tego powodu, ale wygenerowany wynik jest prawidłowy json. – MUG4N