我尝试使用Fiddler读取所有请求和响应,但在某些情况下,我将请求数据作为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的工作,但是
答案 0 :(得分:2)
您表示您可以接收任何JSON 。但是,这将导致严峻的挑战,因为您仍然需要解析数据以便以某种结构化的方式使用它。因此,您应确保始终获得类似的输入。我将为您提供最适合的选项。
选项1 :只有当您的数据遵循JSON
布局时,才能将Dictionary
反序列化为key/value
。所以布局应该总是这样:
{
"key1": "value1",
"key2": "value2"
}
当然,您的价值也可以是一个清单。但是,基本布局仍然相同。例如:
{
"key1": ["value1", "value2"],
"key2": ["value3", "value4"]
}
您可以使用代码反序列化:
var dict = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(requestPost);
选项2:如果您的JSON
数据采用自定义数据名称构建,则必须创建相应的模型。 json2csharp是一个很好的工具,可以让你走上正轨。{3}}。让我举个例子。如果这是您的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
数据的结构为Dictionary
key/value
对。在这种情况下,您可以直接反序列化为Dictionary
。否则,您必须创建自定义模型以适合您的JSON
数据。使用最适合你的东西! 请注意可以反序列化随机数据,但这会让您很难确保代码可以处理数据!有关如何执行此操作,请参阅Luke's answer。
答案 1 :(得分:1)
如果您希望能够反序列化任何JSON ,那么您需要反序列化的类型只是cs.setUnderlying(&as);
,而不是dynamic
,因为这意味着您必须在你的JSON中有一个字符串键...
因此,要反序列化任何JSON对象,按要求,您需要使用代码:
Dictionary<string, dynamic>
请记住,JSON可以像以下一样简单:
var json = JsonConvert.DeserializeObject(requestPost);
哪个与您的模型不匹配,因为没有键(字典中的字符串)。