Каковы некоторые параметры для преобразования данных с кодировкой URL-адресов в JSON в .Net
У меня есть веб-запрос, который отправляет данные сервера в формате application/x-www-form-urlencoded
. Я хотел бы преобразовать его в application/json
.
Пример:
Данные формы с кодировкой URL:
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
Довольно версия:
Property1=A
Property2=B
Property3[0][SubProperty1]=a
Property3[0][SubProperty2]=b
Property3[1][SubProperty1]=c
Property3[1][SubProperty2]=d
Вышеуказанные данные необходимо преобразовать в следующие данные JSON:
{
Property1: "A",
Property2: "B",
Property3: [
{ SubProperty1: "a", SubProperty2: "b" },
{ SubProperty1: "c", SubProperty2: "d" }]
}
Вопрос:
Есть ли свободные инструменты, способные это сделать? Я не смог найти никого, и если бы они существовали, я бы предпочел их употреблять, кроме как писать сам, но если это произойдет, я буду.
A С#/. Чистое решение является предпочтительным.
Ответы
Ответ 1
Я написал класс утилиты для синтаксического анализа строк запроса и данных формы. Он доступен по адресу:
https://gist.github.com/peteroupc/5619864
Пример:
// 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);
Сообщите мне, если это сработает для вас.
Ответ 2
В .NET Framework 4.5 все, что вам нужно, чтобы преобразовать данные формы с кодировкой url в JSON. Для этого вам нужно добавить ссылку на пространство имен System.Web.Extension
в проекте С#. После этого вы можете использовать класс JavaScriptSerializer
, который предоставляет вам все необходимое для преобразования.
Код
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();
}
}
}
Выход
{
"Property1":"A",
"Property2":"B",
"Property3[0][SubProperty1]":"a",
"Property3[0][SubProperty2]":"b",
"Property3[1][SubProperty1]":"c",
"Property3[1][SubProperty2]":"d"
}
Примечание. Вывод не содержит строк или форматирования
Источник: Как преобразовать строку запроса в строку json?