0

'json'でいくつかのデータを受信するサービスがありますが、どのデータかわかりません。しかし、私はそこにあるかもしれない属性のセットを持っています。Json形式はこのようなものであり、変更することはできません。名前は異なる可能性があります。

{"Parent1":
     {"Child1":"Value1","Child2":"Value2"},
 "Parent2":
     {"Child1":"Value1","Child2":"Value2"},
 "Parent3":
     {"Child1":
          {"SubChild1":"Value1","SubChild2":"Value2"}}
}

キーと値のペアを取得できるように、すべてのアイテムを列挙したいと思います。複数のオブジェクトが同じキーを持ち、親が異なる可能性があるため、階層が重要であることに注意してください。また、キーがわからないことにも注意してください。値だけでなくキーも取得する必要があるため、POCOオブジェクトをすぐに取得することはできません。

したがって、基本的に問題は、すべてのプロパティ(キーと値の両方へのアクセサーを使用)を介してイテレーターを実装し、階層をサポートするコレクションを取得する方法です。

4

2 に答える 2

2

JSON入力を(型指定されていない)DOMにいつでも逆シリアル化して、JSONドキュメントを表すツリーをトラバースできます。いくつかのオプションがあります。JavaScriptSerializerクラスは、そのJSONをに逆シリアルDictionary<string, object>化します(配列の場合は、に逆シリアル化しますobject[])。または、 JSON.NETなどのサードパーティライブラリを使用して、任意のJSONをJToken / JObject / JArray / JValueツリーに逆シリアル化し、それらのクラスのメソッドを使用してトラバースすることができます。

于 2012-10-18T04:11:19.953 に答える
1

返されたJSONの形式について、あなたがどれだけの知識を持っているかは、あなたの質問からははっきりしていません。キー名がわからない場合は、デシリアライザーを使用して、C#POCOをうまく利用できない可能性があります。

最善の策は、おそらくC#動的タイプを使用することです。Facebook C#SDKは、まさにこの理由で動的を使用しているため、常に変化するデータを最新の状態に保つ必要はありません。あなたはここで彼らの正当化を読むことができます、そして多分それはあなたがあなたのデータを同様にモデル化することができる方法のいくつかの提案を与えることができます。

于 2012-10-18T03:55:47.610 に答える