7 c# model-view-controller 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
Run Code Online (Sandbox Code Playgroud)
在这一点上,它返回一个结果,但我收到一个错误:
无法将类型'Newtonsoft.Json.Linq.JToken'隐式转换为'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"
},
Run Code Online (Sandbox Code Playgroud)
JSON表示一个包含对象data
数组的外部对象,每个项目均包含一个address_obj
具有字符串属性的对象。因此,JToken
您使用的索引器语法必须匹配该层次结构,包括使用正确的属性名称。另外,从a检索值时,JToken
需要将其转换为正确的类型。
您可以这样获得城市,i
您想要的位置的索引在哪里:
l.city = (string)obj["data"][i]["address_obj"]["city"];
Run Code Online (Sandbox Code Playgroud)
但是,如果您要做的只是填充模型对象,那么直接将序列化反序列化到使用的对象可能会比使用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; }
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以像这样直接反序列化它们:
RootObject obj = JsonConvert.DeserializeObject<RootObject>(result);
Run Code Online (Sandbox Code Playgroud)
以下是如何以字符串形式获取 JToken 和 JArray 的示例。
使用 Formatting.None 进行简单格式化。
string json = "[\"a\", null, \"b\", null, null, null, 0,[],[[\"c\"], null,[0],[\"d\"]]]";
JArray array = JArray.Parse(json);
// array string
string arrayStr = array.ToString(Newtonsoft.Json.Formatting.None);
for (int i = 0; i < array.Count; i++)
{
JToken elem = array[i];
// token string
string jtokenStr = elem.ToString(Newtonsoft.Json.Formatting.None);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22269 次 |
最近记录: |