仅从嵌套的 JSON 中检索电话号码数据



我正在尝试使用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 字符串上使用反序列化对象不是一种选择。但是,我确实尝试了以下选项:

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.

我已经尝试了许多提供的在线解决方案,但没有一个有效。我现在没有选择。

只需定义所需的属性。

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;

您是否尝试过使用JsonConvert.DeserializeObject<T>(string)API 但向其发送整个请求?像这样:

PhoneNumberModel phone = JsonConvert.DeserializeObject<PhoneNumberModel>(request);

Newtonsoft 忽略目标类中缺少的属性。

你可以像这样将PhoneNumber放到模型中:

PhoneNumberModel model =
JArray.Parse(json)[0]
.SelectToken("PhoneNumber")
.ToObject<PhoneNumberModel>();

小提琴:https://dotnetfiddle.net/U21KfN

最新更新