2017-06-19 29 views
0

我想从嵌套的JSON使用Newtonsoft DLL检索数据(只是电话号码)。 JSON(请求)看起来是这样的:从嵌套的JSON检索电话号码数据

[{ 
    "name": "sam", 
    "age": 19, 
    "Gender" : "F", 
    "Email" : "[email protected]", 
    ... 
    "PhoneNumber" :{ 
     "CCode":"1", 
     "Area": "123", 
     "PhoneNum": "456-789", 
     "PhoneExtn": "" 
    } 
    ... 
}] 

我有更多的价值在,但我只需要电话号码,所以上面的属性上述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. 

我已经尝试了很多提供在线解决方案,但没有工作。我现在没有选择了。

+1

你不** **有创建所有的JSON性能特性;只是你需要的那些... – Kyle

+0

@Kyle。是的,这工作。谢谢。 – Samyukta

回答

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; 
0

您是否尝试过使用JsonConvert.DeserializeObject<T>(string) API,但将整个请求发送给它?类似这样的:

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

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

0

你可以得到PhoneNumber到模型是这样的:

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

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