2017-06-22 17 views
1

JSONデータの文字列をC#クラスオブジェクトに変換しようとしています。しかし、私は本質的に動的なJSONの小さな部分に問題があります。Json DeserializeObjectを動的プロパティを持つクラスに追加する

JSONの一部は、以下である:

"contact": [{ 
    "comment": null, 
    "type": { 
     "id": "cell", 
     "name": "Example name" 
    }, 
    "preferred": true, 
    "value": { 
     "country": "7", 
     "formatted": "+7 (702) 344-3423-3", 
     "number": "3498908", 
     "city": "702" 
    } 
}, 
{ 
    "type": { 
     "id": "email", 
     "name": "Email example" 
    }, 
    "preferred": false, 
    "value": "[email protected]" 
}] 

C#クラス

public class Value 
{ 
    public string country { get; set; } 
    public string formatted { get; set; } 
    public string number { get; set; } 
    public string city { get; set; } 
} 

public class Type 
{ 
    public string id { get; set; } 
    public string name { get; set; } 
} 

public class Contact 
{ 
    public string comment { get; set; } 
    public Type type { get; set; } 
    public bool preferred { get; set; } 
    public string value { get; set; } 
} 

C#コード

Contact contact = JsonConvert.DeserializeObject<Contact>(result); 

接触情報に応じて、 "値" の変更の形式。値を文字列とクラス値の両方にマップすることは可能ですか?

ご協力いただきありがとうございます。あなたがJSONで見ることができるように

+0

私には、クラス構造が間違っているようです。基本クラスValueと他の2つのクラスAddressValueとEmailValueがあるように見えます。 –

答えて

2

あなたは文字通り使用することができます配列全体を渡している、配列を示す

"contact": [ 

​​

をお試しくださいdynamic、すなわち

public dynamic value { get; set; } 

オブジェクトのように見える場合は、dynamic APIを使用して使用できるJObjectとしてマテリアライズされるため、.value.countryなどが動作します。整数、ブールまたは文字列のように見える場合は、 。配列も適切に処理されます。だから:.value is stringなどを確認することができます。これはあなたのValueタイプを使用しないので、そうすることはより複雑ですが、:meh;あなたはデータを取得します。手動で切り替えることができます。

dynamicの代わりにobjectを使用すると、このようにも動作しますが、内側のプロパティにアクセスするのは難しくなります。

+0

Marcありがとう、これは私のために働いた。 プロパティを に変更しました。 'public dynamic value {get;セット; } ' – user5498736

0

、それは現在、あなただけの

+0

私はそれが質問のポイントだとは思わない。私はOPは「ここには大きなオブジェクトの断片です」と言っていると思います。そこには「連絡先」または「連絡先」という名前のリストがあります。 –

0

JSONが常に同じ構造であることが確実でない限り、deserializeの代わりにdynamic変数をクラスに使用することをお勧めします。

クラスで作業したい場合は、いつもruntimeに自分自身を作成し​​てreflectionを使用してください。しかし、それはのように大砲でフライを殺すのですあなたはおそらくそれを必要としないでしょうから、代わりにdynamic変数を使用してください。それはJSON文字列で作業するのが最良です。

関連する問題