asp.net – JObject.Parse与JsonConvert.DeserializeObject
|
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 4实体框架6 SQL Compact Edition 4.0部署无需安
- asp.net-mvc-4 – 找不到布局页面
- 如何在ASP.NET页面上使用框架?
- asp.net-mvc – 如何获取路由值在视图(Asp.net Mvc)
- 如何实现ASP.NET 2.0,Coldfusion 5和Classic ASP之间互操作
- asp.net-mvc – Asp.net MVC 3验证在TryUpdateModel中排除了
- asp.net-mvc-3 – FluentValidation – 验证跨多个属性
- ASP.NET DateTime Picker
- asp.net-mvc – FormsAuthentication.SetAuthCookie vs For
- asp.net-mvc – 使用jQuery ajax / load提交数组参数
- 将ASP.Net MVC的单页添加到现有的Web窗体应用程序
- asp.net – 如何在一个web项目正在调试的同时运行
- asp.net-mvc – JSON,ASP.NET MVC – MaxJsonLen
- asp.net编程实现删除文件夹及文件夹下文件的方法
- 在asp.net mvc中如何使用usercontrols来显示“岛
- asp.net-mvc – 如何从强类型视图中隐藏实体框架
- asp.net – 如何在Eval格式字符串中使用单引号
- asp.net-mvc – 带MVC结果的Response.Flush无效
- asp.net-mvc – 在嵌套内容的区域上使用_ViewSta
- asp.net-mvc – Visual Studio不允许在MVC视图中
