c# - 如何从 JToken 获取字符串值

标签 c# json json.net

我从返回 JSON 响应的 Web 服务获取数据。 这是我的代码:

WebClient client = new WebClient();
var result =  client.DownloadString("http://some url");
    
JObject obj = JObject.Parse(result);

// Location l = new Location();
//   l.city = obj["ad"][2]; error here

此时它返回了一个结果,但是我得到了一个错误:

Cannot implicitly convert type 'Newtonsoft.Json.Linq.JToken' to 'string'

我需要一些帮助,将返回的数据放入模型中的变量中。

这是我的 JSON:

{
  data: [
  {
    address_obj: {
    street1: "9518 Front Beach Road",
    street2: "",
    city: "Panama City Beach",
    state: "Florida",
    country: "United States",
    postalcode: "32407",
    address_string: "9518 Front Beach Road, Panama City Beach, FL 32407"
  },

最佳答案

JSON 表示包含 data 的外部对象对象数组,每个项目包含一个 address_obj然后具有字符串属性的对象。所以 JToken您使用的索引器语法必须匹配该层次结构,包括使用正确的属性名称。此外,当从 JToken 中检索值时您需要将其转换为正确的类型。

你可以这样得到城市,其中i是你想要的位置的索引:

l.city = (string)obj["data"][i]["address_obj"]["city"];

但是,如果您所做的只是填充模型对象,那么使用 JsonConvert.DeserializeObject<T> 直接反序列化可能会更简单。而不是使用 JTokens 手动填充它们.例如,如果您的类定义如下:

public class RootObject
{
    [JsonProperty("data")]
    public List<Item> Data { get; set; }
}

public class Item
{
    [JsonProperty("address_obj")]
    public Location Location { get; set; }
}

public class Location
{
    [JsonProperty("street1")]
    public string Street1 { get; set; }
    [JsonProperty("street2")]
    public string Street2 { get; set; }
    [JsonProperty("city")]
    public string City { get; set; }
    [JsonProperty("state")]
    public string State { get; set; }
    [JsonProperty("country")]
    public string Country { get; set; }
    [JsonProperty("postalcode")]
    public string PostalCode { get; set; }
    [JsonProperty("address_string")]
    public string FullAddress { get; set; }
}

然后你可以像这样直接反序列化它们:

RootObject obj = JsonConvert.DeserializeObject<RootObject>(result);

关于c# - 如何从 JToken 获取字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33754692/

相关文章:

python - 在 Python 中将一部分 geojson 对象合并到另一个对象中

serialization - JSON.Net 引用变为空

c# - C#中整数相减时错误 "Can' t implicitly convert int to short"

c# - 正在生成的报告在 IE8.0 中永远运行,但适用于 firefox

python - 如何用列表中的单词替换重复多次的单个单词?

jquery - 如何动态从 ASP.NET MVC Controller 获取数据到 jQuery?

c# - 针对 Schema.org 验证 JSON-LD

c# - 如何避免循环多线程任务中 JSON 序列化期间集合修改?

C# BinaryFormatter - 如何找出二进制数据的类?

c# - 从没有文本框的条形码阅读器获取数据