Json.Net将复杂的查询字符串转换为JsonString

时间:2015-06-30 19:18:30

标签: c# json xamarin json.net

我正在实现一个实用工具方法,将queryString转换为JsonString。

我的代码如下:

        public static string GetJsonStringFromQueryString(string queryString)
        {
            var nvs = HttpUtility.ParseQueryString(queryString);
            var dict = nvs.AllKeys.ToDictionary(k => k, k => nvs[k]);
            return JsonConvert.SerializeObject(dict, new KeyValuePairConverter());
        }

当我使用以下代码进行测试时:

 var postString = "product[description]=GreatStuff" +
                    "&product[extra_info]=Extra"; 
 string json = JsonHelper<Product>.GetJsonStringFromQueryString(postString);

我得到了

{
    "product[description]":"GreatStuff",
    "product[extra_info]":"Extra",

      ...

   }

我想得到的是

{
    "product":{
       "description": "GreatStuff",
       "extra_info" : "Extra",
       ...
    }
}

如何在不使用System.Web.Script程序集的情况下实现此目的? (我在Xamarin,无法访问该库)

1 个答案:

答案 0 :(得分:0)

您需要删除product[key](产品属性名称或密钥...除外)部分才能获得所需内容...

也就是说,您应该在以这种方式解析之前预处理查询字符串:

string queryString = "product[description]=GreatStuff" +
        "&product[extra_info]=Extra";
var queryStringCollection = HttpUtility.ParseQueryString(queryString);
var cleanQueryStringDictionary = queryStringCollection.AllKeys
                                    .ToDictionary
                                    (
                                        key => key.Replace("product[", string.Empty).Replace("]", string.Empty),
                                        key => queryStringCollection[key]
                                    );

var holder = new { product = cleanQueryStringDictionary };
string jsonText = JsonConvert.SerializeObject(holder);