2017-06-19 33 views
0

Newtonsoft dllを使用してネストされたJSONからデータ(電話番号のみ)を取得しようとしています。私はでより多くの価値を持っていますが、私は上記のプロパティでカスタムクラスを作成し、上記のJSONにDeserializeObjectを使用して、電話番号のみを必要とするネストされたJSONから電話番号データを取得する

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

: JSON(リクエスト)は次のようになりますstringはオプションではありません。しかし、私は、下記のオプションを試してみました:

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

ニュートンソフトは、ターゲットクラスの不足しているプロパティを無視します。

0

あなたはこのようなあなたのモデルにPhoneNumberを取得することができます:

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

フィドル:https://dotnetfiddle.net/U21KfN

関連する問題