asp.net – JObject.Parse与JsonConvert.DeserializeObject
发布时间:2020-12-15 18:47:11 所属栏目:asp.Net 来源:网络整理
导读:JsonConvert.DeserializeObject和JObject.Parse有什么区别?据我所知,两者都采用一个字符串,并在Json.NET库中。什么样的情况会使一个比另一个更方便,还是主要是偏爱? 作为参考,这里是一个使用两者完全相同的事情的例子 – 解析一个Json字符串并返回一个
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,"+ "'feat_class':'Civil','feature_id':'36866','fips_class':'H1','fips_county_cd':'3','url':'http://www.bakercountyfl.org/','name':'Baker County','primary_latitude':'30.33','primary_longitude':'-82.29','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; } 解决方法
存在LINQ到JSON API(JObject,JToken等)以允许使用JSON,而无需事先知道其结构。您可以使用JToken.Parse反序列化任意JSON,然后使用其他JToken方法检查和操作其内容。如果您只需要JSON中的一个或两个值(如县名),LINQ to JSON也可以正常工作。
另一方面,JsonConvert.DeserializeObject主要是为了在您提前了解JSON的结构并且要反序列化为强类型类时使用它们。例如,您将如何将JSON中的完整的县级数据从县域列表中列出。 class Program { static void Main(string[] args) { string countiesJson = "{'Everything':[{'county_name':null," +"'fips_class':'H1',"+ "{'county_name':null,'state_name':'Florida'}]}"; foreach (County c in JsonParseCounties(countiesJson)) { Console.WriteLine(string.Format("{0},{1} ({2},{3})",c.name,c.state_abbreviation,c.primary_latitude,c.primary_longitude)); } } public static List<County> JsonParseCounties(string jsonText) { return JsonConvert.DeserializeObject<RootObject>(jsonText).Counties; } } public class RootObject { [JsonProperty("Everything")] public List<County> Counties { get; set; } } public class County { public string county_name { get; set; } public string description { get; set; } public string feat_class { get; set; } public string feature_id { get; set; } public string fips_class { get; set; } public string fips_county_cd { get; set; } public string full_county_name { get; set; } public string link_title { get; set; } public string url { get; set; } public string name { get; set; } public string primary_latitude { get; set; } public string primary_longitude { get; set; } public string state_abbreviation { get; set; } public string state_name { get; set; } } 请注意,Json.Net使用给JsonConvert.DeserializeObject方法的类型参数来确定要创建的对象类型。 当然,如果您在调用DeserializeObject时没有指定类型,或者使用对象或动态方法,那么Json.Net不得不反序列化为JObject。 (你可以看到你的动态变量实际上是通过检查jResults.GetType()来获取JObject。FullName。)所以在这种情况下,JsonConvert.DeserializeObject和JToken.Parse之间没有什么区别。或者会给你一样的结果。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – ASP.NET MVC性能
- .net – Viewstate隐藏字段如此之大,一切都会崩溃
- 从ASP.NET中的web.sitemap文件构建菜单
- asp.net – 如何在MVC4 Web API中自定义JSON序列化名称?
- asp.net – 为什么我的项目引用不被Visual Studio中的Web部
- asp.net-mvc – ASP.NET MVC Beta 1 – 哪里是Html.RenderP
- asp.net – 有没有办法使用System.Net.Mail.SendAsync()捕获
- asp.net – 使用jquery的IE不能正常工作
- 用户登录时,ASP.NET Core更改EF连接字符串
- asp.net – Linq’包含’查询耗时太长
推荐文章
站长推荐
热点阅读