gpt4 book ai didi

c# - JObject.Parse 与 JsonConvert.DeserializeObject

转载 作者:IT王子 更新时间:2023-10-29 03:42:32 28 4
gpt4 key购买 nike

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;
}

最佳答案

LINQ-to-JSON API(JObjectJToken 等)的存在是为了允许使用 JSON 而无需提前知道其结构。您可以使用 JToken.Parse 反序列化任何任意 JSON ,然后使用其他 JToken 检查和操作其内容方法。如果您只需要 JSON 中的一个或两个值(例如县名),LINQ-to-JSON 也能很好地工作。

JsonConvert.DeserializeObject ,另一方面,主要用于当你提前知道 JSON 的结构并且你想反序列化为强类型类时使用。例如,以下是如何将完整的县数据集从 JSON 获取到 County 的列表中。对象。

class Program
{
static void Main(string[] args)
{
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'}]}";

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时没有指定类型,或者您使用 objectdynamic , 那么 Json.Net 别无选择,只能反序列化为 JObject . (您可以通过检查 JObject 自己看到您的动态变量实际上包含一个 jResults.GetType().FullName。)所以在那种情况下,JsonConvert.DeserializeObject 之间没有太大区别。和 JToken.Parse ;两者都会给你相同的结果。

关于c# - JObject.Parse 与 JsonConvert.DeserializeObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23645034/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com