2012-01-05 19 views
5

私は、JSON文字列を次のようしている。Json.NETを使用して配列内の各オブジェクトの "root"要素を使用してJSON配列を逆シリアル化する方法はありますか?

[ 
    { "Person" : { "Name" : "John", "Gender" : "male" } }, 
    { "Person" : { "Name" : "John", "Gender" : "male" } } 
] 

(あなたは、残念ながら私は、配列内の各オブジェクトのための「ルート」要素の並べ替えを持って気づくこととして、この「ルート」要素がなければタスクは非常に些細となります。)

私はPersonクラスのリストにそれをデシリアライズする必要があります。

class Person { 
    public string Name { get; set; } 
    public string Gender { get; set; } 
} 
... 
List<Person> ListPersons() { 
    return JsonConvert.DeserializeObject<List<Person>>(jsonString); 
} 

それはPersonResultのようなラッパークラスを作成せずにJson.NETで行うことは可能ですか?

class PersonResult { 
    public Person Person { get; set; } 
} 
... 
List<Person> ListPersons() { 
    return JsonConvert.DeserializeObject<List<PersonResult>>(jsonString) 
         .Select(p => p.Person) 
         .ToList(); 
} 

私のための完璧なソリューションを何とか明示的生憎

答えて

4

など、(例えば属性経由)、この「ルート」を指定し、任意のラッパーを作成していない、ヘルパーできるようにすることです、あなたはずっとそこにすることができませんこの問題について。これがJSON形式の外観です。その周りには方法はありません。その結果、Json.Netは多かれ少なかれとしてあなたの文字列を「見る」:

あなたがNameGenderプロパティ

を持つ別のオブジェクト可能性があるPersonプロパティを持つオブジェクトの配列シリアライザを別の方法で動作させるためにカスタムContractResolversでいくつか再生することも可能ですが、それはかなりの作業です。あなたが提案したようなラッパークラスは、それらの問題がどのように扱われているかです。私はそれに固執することをお勧めします。

+0

残念ながら、私はラッパーのアプローチで終わらなければならなかった。ありがとう。 –

関連する問題