C# 在.Net中,有哪些选项可以将Url编码的表单数据转换为JSON

C# 在.Net中,有哪些选项可以将Url编码的表单数据转换为JSON,c#,.net,json,.net-4.5,forms,C#,.net,Json,.net 4.5,Forms,我有一个web请求,它正在发送格式为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&a

我有一个web请求,它正在发送格式为
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" }]
}
问题:

有没有能够做到这一点的免费工具?我自己也找不到,如果它们存在,我宁愿把它们吃掉,也不愿自己写一本,但如果真是这样,我会的


首选C#/.Net解决方案。

我编写了一个实用程序类,用于解析查询字符串和表单数据。可从以下网址获得:

例如:

// 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);
//问题的查询字符串示例
String test=“Property1=A&Property2=B&Property3%5B0%5D%5bSubperty1%5D=A&Property3%5B0%5D%5bSubperty2%5D=B&Property3%5B1%5D%5bSubperty1%5D=c&Property3%5B1%5D%5bSubperty2%5D=d”;
//将查询字符串转换为JSON友好字典
var o=QueryStringHelper.QueryStringToDict(测试);
//使用JSON.NET将字典转换为JSON字符串
//图书馆
var json=JsonConvert.SerializeObject(o);
//将JSON字符串输出到控制台
Console.WriteLine(json);

让我知道它是否适合您。

NET Framework 4.5包含将url编码的表单数据转换为JSON所需的一切。为此,您必须在C#项目中添加对命名空间
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();
        }
    }
}
注意:输出不包含换行符或任何格式


来源:

谢谢分享!我会检查一下的。我不敢相信我是第一个需要这么做的人。我很高兴我不是一个人。你包含的输出与我要求的输出不匹配。@Dan:但是,如果你决定自己写,这将是一个很好的起点。扩展它以满足您的需求可能非常容易。@Dan:您是对的,这并不是您想要的。对此我很抱歉,但生成的输出是有效的json。@MUG4N我不是说它不是。我只是说这对我没有好处。有效的JSON只是需求的一部分。我需要正确表示数据的有效JSON。不过,我很感谢你的帮助。
{
    "Property1":"A",
    "Property2":"B",
    "Property3[0][SubProperty1]":"a",
    "Property3[0][SubProperty2]":"b",
    "Property3[1][SubProperty1]":"c",
    "Property3[1][SubProperty2]":"d"
}