c# - Json.Net 将复杂查询字符串转换为 JsonString

标签 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 Assembly 的情况下实现这一目标? (我在 Xamarin 上,无法访问该库)

最佳答案

您需要删除 product[key](产品属性名称或 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);

关于c# - Json.Net 将复杂查询字符串转换为 JsonString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31146621/

相关文章:

c# - LINQ 按文本搜索

c# - 如何将 task.Wait(CancellationToken) 转换为 await 语句?

c# - VB5 dll,如何从 C# ( .NET 4.5 ) 调用函数

c# - 如何使用 IConfidentialClientApplication 获取安全 Web API 的 token

json - Jackson SerializationFeature.WRITE_DATES_AS_TIMESTAMPS 在 Spring 没有关闭时间戳

json - 将 GeoJSON 文件导入 React-Leaflet

php - JSON 响应中的 boolean 值在生产服务器上转换为字符串

xaml - 如何在 Xamarin.Forms 中将图像居中而不拉伸(stretch)它

xamarin - 如何在 Xamarin.Forms 中创建可点击标签以使用外部浏览器打开外部 url?

android - Xamarin.Android DialogFragment一些LifeCycle事件未触发