2017-06-27 7 views
0

JSON.netのDeserializeObjectでプロパティをデシリアライズする際に問題が発生しています。 JSONは適切にフォーマットされており、DeserializeObjectを使用して抽出し、動的プロパティにアクセスできますが、モデルから逆シリアル化すると、プロパティは常にnullになります。Json.NETはリストを逆シリアル化できませんをJSONの配列

私はv10のJSON.netを使用しています。

問題のプロパティは、次のように定義されます

[JsonProperty(PropertyName = "email")] 
    public List<string> EmailAddresses { get; set; } 

JSONは以下の通りです:

"representative" : { 
    "id" : 16, 
    "username" : "jb", 
    "firstName" : "James", 
    "lastName" : "Bond", 
    "emailAddress" : "[email protected]" 
    }, 
    "email" : [ "[email protected]", "[email protected]" ], 
    "permissionTag" : "Public", 
    "website" : null, 

すると、私は

var restResponse = await client.ExecuteTaskAsync<T>(request, cancelToken); 

すなわち、それの型/ wのオブジェクトをデシリアライズするときプロパティはnullです。

私は以下を行うことができますが、なぜ私は、逆シリアル化が失敗しているのか理解したいです。

dynamic jsonResponse = JsonConvert.DeserializeObject(restResponse.Content); 
var tagsJArray = jsonResponse.email as JArray; 
if (tagsJArray != null) 
{ 
    restResponse.Data.EmailAddresses = tagsJArray.ToObject<List<string>>(); 
} 

私はJsonProperty属性が不足していると想定していますが、試したことはありません。誰もがこれについていくつかの光を当てることができますか?

ありがとうございます。

+0

これは、https://stackoverflow.com/a/30147559/1498401とライブの例:https://dotnetfiddle.net/ayZBlL – tinamou

+2

あなたのルートタイプを示す完全な[mcve]にあなたの質問を広げることができますあなたは 'client'をどのように構築しますか?私はあなたの問題[ここ](https://dotnetfiddle.net/xJ2u7F)を再現しようとしましたが、すべてうまくいくようです。 – dbc

+0

電子メールのプロパティまたは他のすべてのプロパティでnullが返ってきていますか? – Arman

答えて

0

EmailAddressesプロパティが含まれているクラスの名前がExampleであれば、あなたは以下のようにあなたのJSONをデシリアライズする必要があります。いつものように

var restResponse = await client.ExecuteTaskAsync<Example>(request, cancelToken); 
0

を、これは誤解の問題でした。私が使用していたクライアントは最近RestSharp.RestClientに切り替えられましたが、私たちの属性は更新されず、無視されていました。適切な属性セットに切り替えると、フィールドは適切に非直列化されます。