2017-06-19 28 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