[英]Parse any Json into Key value pair
我嘗試使用Fiddler讀取所有的Request和Response,但是在某些情況下,我將請求數據作為JSON獲取,並且我想將該JSON解析為鍵值對。
我已經試過了
string requestPost = Utilities.UrlDecode(oSession.GetRequestBodyAsString());
Dictionary<string, string> jsonRequest = new Dictionary<string, string>();
jsonRequest = JsonConvert.DeserializeObject<Dictionary<string, string>>(requestPost);
dataGridViewFiddler.DataSource = jsonRequest;
但這對我不起作用。
這是我的Json格式
{"entries":[{"http_response_code":200,"network_changed":false,"protocol":"QUIC","request_age_ms":112425,"request_elapsed_ms":27,"sample_rate":0.05,"server_ip":"216.58.197.78:443","status":"ok","url":"https://www.google-analytics.com/","was_proxied":false}],"reporter":"chrome"}
現在,如果我使用動態解析此json的工作,但
您表示可以接收任何JSON 。 但是,這將帶來嚴峻的挑戰,因為您仍然必須解析數據才能以某種結構化方式使用它。 因此,您應確保始終獲得類似的輸入。 我將為您提供最合適的選擇。
選項1:僅當數據遵循key/value
布局時,才能將JSON
反序列化為Dictionary
。 因此,布局應始終如下所示:
{
"key1": "value1",
"key2": "value2"
}
當然,您的值也可以是列表。 但是,基本布局仍然相同。 例如:
{
"key1": ["value1", "value2"],
"key2": ["value3", "value4"]
}
您只需使用代碼反序列化即可:
var dict = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(requestPost);
選項2:如果JSON
數據由自定義數據名稱構成,則必須創建相應的模型。 json2csharp是一個可以使您走上正確道路的好工具。 讓我舉個例子吧。 如果這是您的JSON
:
[{
"Key": "MyKey",
"Values": [{
"First": "RandomValue",
"Second": "RandomValue"
}, {
"First": "RandomValue",
"Second": "RandomValue"
}]
},
{
"Key": "MyKey",
"Values": [{
"First": "RandomValue",
"Second": "RandomValue"
}, {
"First": "RandomValue",
"Second": "RandomValue"
}]
}]
那么您對應的模型應該是:
public class Value
{
public string First { get; set; }
public string Second { get; set; }
}
public class RootObject
{
public string Key { get; set; }
public List<Value> Values { get; set; }
}
您可以像這樣反序列化它:
var values = JsonConvert.DeserializeObject<List<RootObject>>(json);
最后,您可以確保將JSON
數據構造為具有key/value
對的Dictionary
。 在這種情況下,您可以直接反序列化為Dictionary
。 否則,您將必須創建自定義模型以適合您的JSON
數據。 使用最適合您的方法! 請注意 ,可以反序列化隨機數據,但是很難確保您的代碼可以處理數據! 有關如何執行此操作,請參閱盧克的答案 。
如果您希望能夠反序列化任何JSON ,那么您需要反序列化的類型就是dynamic
,而不是Dictionary<string, dynamic>
因為這意味着您必須在JSON中具有字符串鍵。
因此,要按要求反序列化任何JSON對象,您需要使用以下代碼:
var json = JsonConvert.DeserializeObject(requestPost);
請記住,JSON可以很簡單:
["bob", "fred"]
由於沒有鍵(字典中的字符串),因此與您的模型不匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.