Json.Net 将复杂的查询字符串转换为 JsonString
Posted
技术标签:
【中文标题】Json.Net 将复杂的查询字符串转换为 JsonString【英文标题】:Json.Net convert complex querystring to JsonString 【发布时间】:2015-09-17 17:49:35 【问题描述】:我正在实现一个实用方法来将 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 Assembly 的情况下实现这一目标? (我在 Xamarin 上,无法访问该库)
【问题讨论】:
如果您查询的字符串看起来像这样,您必须编写自己的 C# 逻辑来解析它们。 var postString = "product[description]=GreatStuff" + "&product[extra_info]=Extra" + "&product[ledger_account_id]=42" + "&product[sales_price]=11.5" + "&product[sales_price_includes_tax]=0" + "&product [tax_code_id]=33"; 看到这个***.com/questions/15872658/… 【参考方案1】:您需要删除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);
【讨论】:
这适用于单层嵌套对象。如果我有类似 product[vender][address][street_line1] = "8 hanson street" 的东西。有没有通用的解决方案? @WeiMa AFAIK,没有。归根结底,您的查询字符串有点奇怪....您正在创建类似 OData 或谁知道的东西 :( 我的意思是,您需要自定义从查询字符串到 JSON 的序列化。显然您可以开发一些基本的解析器甚至涵盖从查询字符串到 json 的递归转换............ @WeiMa 我可以在这里放一个自制的解决方案......但遗憾的是我需要吃晚饭和睡觉;P顺便说一句,你最终可以得到一个解析每个级别的通用解决方案[key1][keyN]
并像我在回答中所做的那样,但递归地,你知道......
是的,我明白了。评估是否值得努力创建递归解决方案。谢谢你的回答。以上是关于Json.Net 将复杂的查询字符串转换为 JsonString的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 json.net 将数据表转换为 json 字符串?