我正在尝试使用Newtonsoft dll从嵌套的JSON中检索数据(只是电话号码)。 Json(请求)看起来像这样:
[{
"name": "sam",
"age": 19,
"Gender" : "F",
"Email" : "sam@test.com",
...
"PhoneNumber" :{
"CCode":"1",
"Area": "123",
"PhoneNum": "456-789",
"PhoneExtn": ""
}
...
}]
我在json中有更多的值,但我只需要电话号码,因此创建一个具有上述属性的自定义类并在上面的JSON字符串上使用 DeserializeObject 不是一个选项。但是,我确实尝试了以下选项:
dynamic jsonObj = JsonConvert.DeserializeObject(request);
var option1 = (string)jsonObj["PhoneNumber"]["CCode"];
var option2 = (string)jsonObj["PhoneNumber"][0]["CCode"];
//option3
PhoneNumberModel phone = JsonConvert.DeserializeObject<PhoneNumberModel>(jsonObj["PhoneNumber"].ToObject<string>());
//option4
PhoneNumberModel phone = JsonConvert.DeserializeObject<PhoneNumberModel>(jsonObj["PhoneNumber"][0].ToObject<string>());
获取以下例外情况:
1. Cannot apply indexing with [] to an expression of type for first three options
2. Accessed JObject values with invalid key value: 0. Object property name expected for option 4.
我尝试了许多在线解决方案但没有工作。我现在已经没有选择了。
答案 0 :(得分:1)
只需定义您需要的属性即可。
public class Person
{
[JsonProperty(PropertyName = "name")]
public string Name { get; set; }
[JsonProperty(PropertyName = "PhoneNumber")]
public PhoneNumberModel { get; set; }
}
public class PhoneNumberModel
{
public int CCode { get; set;}
public int Area { get; set;}
public string PhoneNum { get; set; }
public string PhoneExtn { get; set; }
}
var person = JsonConvert.DeserializeObject<Person>(json);
var name = person.Name;
var phoneNumber = person.PhoneNumberModel;
答案 1 :(得分:0)
您是否尝试过使用JsonConvert.DeserializeObject<T>(string)
API但是将整个请求发送给它?像这样:
PhoneNumberModel phone = JsonConvert.DeserializeObject<PhoneNumberModel>(request);
Newtonsoft会忽略目标类中缺少的属性。
答案 2 :(得分:0)
您可以将PhoneNumber
添加到您的模型中:
PhoneNumberModel model =
JArray.Parse(json)[0]
.SelectToken("PhoneNumber")
.ToObject<PhoneNumberModel>();