JsonConvert.DeserializeObject和JObject.Parse有什么区别?就我所知,它们都接受一个字符串并在Json.NET库中。什么情况下使用其中一个更方便,还是只是个人喜好?
以下是我使用两者完成完全相同的操作的示例 - 解析Json字符串并返回其中一个Json属性的列表。
public ActionResult ReadJson()
{
string countiesJson = "{'Everything':[{'county_name':null,'description':null,'feat_class':'Civil','feature_id':'36865',"
+"'fips_class':'H1','fips_county_cd':'1','full_county_name':null,'link_title':null,'url':'http://www.alachuacounty.us/','name':'Alachua County'"+ ",'primary_latitude':'29.7','primary_longitude':'-82.33','state_abbreviation':'FL','state_name':'Florida'},"+
"{'county_name':null,'description':null,"+ "'feat_class':'Civil','feature_id':'36866','fips_class':'H1','fips_county_cd':'3','full_county_name':null,'link_title':null,'url':'http://www.bakercountyfl.org/','name':'Baker County','primary_latitude':'30.33','primary_longitude':'-82.29','state_abbreviation':'FL','state_name':'Florida'}]}";
//Can use either JSONParseObject or JSONParseDynamic here
List<string> counties = JSONParseObject(countiesJson);
JSONParseDynamic(countiesJson);
return View(counties);
}
public List<string> JSONParseObject(string jsonText)
{
JObject jResults = JObject.Parse(jsonText);
List<string> counties = new List<string>();
foreach (var county in jResults["Everything"])
{
counties.Add((string)county["name"]);
}
return counties;
}
public List<string> JSONParseDynamic(string jsonText)
{
dynamic jResults = JsonConvert.DeserializeObject(jsonText);
List<string> counties = new List<string>();
foreach(var county in jResults.Everything)
{
counties.Add((string)county.name);
}
return counties;
}
MissingMemberHandling
设置控制。默认情况下是忽略额外的属性。 - Brian RogersJObject.Parse(response)
,然后是JsonConvert.DeserializeObject<MyType>(response)
。我试图确定这是否是一些设计来在某些条件下抛出异常以避免调用DeserializeObject
的黑客,还是它设置了一些由JsonConvert.DeserializeObject
使用的状态...或者它只是无意义的代码。 - xr280xr