2015-06-30 58 views
1

我正在實現一個實用程序方法來將queryString轉換爲JsonString。Json.Net將複雜的查詢字符串轉換爲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的,和那些庫中沒有接入)

+0

如果查詢字符串看起來像你必須寫自己的C#的邏輯來解析。 VAR postString = 「產物[描述] = GreatStuff」 + 「&產物[EXTRA_INFO] =額外」 + 「&產物[ledger_account_id] = 42」 + 「&產物[sales_price] = 11.5」 + 「&產物[sales_price_includes_tax] = 0「+ 」&product [tax_code_id] = 33「; – Prashant

+0

看到這 http://stackoverflow.com/questions/15872658/standardized-way-to-serialize-json-to-query-string – Prashant

回答

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); 
+0

這將適用於單層嵌套對象。如果我有產品[供應商] [地址] [street_line1] =「8漢生街」之類的東西。有沒有通用的解決方案? –

+0

@WeiMa AFAIK,no。在一天結束時,你的查詢字符串有點奇怪....你正在創建類似OData或誰知道:(我的意思是,你需要定製從查詢字符串到JSON的序列化。顯然你可以開發一些基本的解析器甚至涵蓋了從查詢字符串到json的遞歸轉換............ –

+0

@WeiMa我可以在這裏下載一個自制的解決方案...但可悲的是我需要吃飯和睡覺; P順便說一句,你最終可以得到類似於解析每個級別[[key1] [keyN]'的通用解決方案,並按照我在答案中做的那樣遞歸地,你知道...... –