我正在从返回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
在这一点上,它返回一个结果,但我收到一个错误:

我需要一些帮助,以将返回的数据放入模型中的变量中。
这是我的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/

10-10 10:57