将json字符串转换为.net中的GET参数

时间:2015-06-11 07:48:01

标签: asp.net .net json

我有这个json字符串,看起来像:

$cfg['Servers'][$i]['auth_type'] = 'cookie';

引号已在字符串中转义。我想通过将其转换为GET参数,找到一种很好的方法来创建一个类似于json的json链接。我真的看到了适用于扁平结构的解决方案。

编辑:我还需要能够转换回json字符串。

2 个答案:

答案 0 :(得分:1)

初步答复

You could do something like this将其转换为链接:

using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Text;

public class Program
{
    public static void Main()
    {       
        dynamic obj = JArray.Parse(jsonString);

        var builder = new StringBuilder();
        builder.Append("?id0=" + obj[0].id);
        builder.Append("&id1=" + obj[1].id);
        builder.Append("&category1=" +obj[1].category);

        Console.WriteLine("http://www.something.com" + builder.ToString());
    }

    public static string jsonString = @"[ {""id"": ""1""}, {""id"": ""2"", ""category"": ""toys""} ]";
}

输出:

http://www.something.com?id0=1&id1=2&category1=toys

更多通用跟进答案

根据您的评论here is something more generic:

using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Text;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        JArray array = JArray.Parse(jsonString);

        var builder = new StringBuilder();

        for (var i = 0; i < array.Count; ++i)
        {           
            JToken obj = array[i];
            foreach (JProperty prop in obj)
            {
                var prefix = i == 0 ? "?" : "&";
                builder.AppendFormat("{0}{1}{2}={3}", prefix, prop.Name, i, prop.Value);
            }
        }

        Console.WriteLine("http://www.something.com" + builder.ToString());
    }

    public static string jsonString = @"[ {""id"": ""1""}, {""id"": ""2"", ""category"": ""toys""} ]";
}

输出:

http://www.something.com?id0=1&id1=2&category1=toys

答案 1 :(得分:0)

好的回答我自己的问题,这不是解决问题的好方法。 json字符串可能非常大,如果服务器上超过2048个字符,则可能会被截断或拒绝。

最好的方法是创建一个jsonHashTable.json,它将存储您尝试发送的密钥的哈希值,以及您作为值发送的内容。然后发送电子邮件哈希/密钥。让接收哈希的控制器使用该表来查找所需的数据。