JavaScript で作成され、JSON で表される動的データを保持するために、C# でデータ構造を構築しようとしています。検索を容易にする方法で JSON データを保持するように C# データ構造を設計する方法についてのアドバイスを探しています。現在、.NET 4.0 を使用しています。4.5 は、この特定のプロジェクトにとっては道のりです。
データには次のプロパティがあります。
- キーと値のペアのコレクション
- キーは一意です
- 値は、、、文字列値、またはキーと値のペアのネストされたコレクションのいずれか
true
ですfalse
。 - 数十の最上位プロパティ、およびネストされたコレクションを持つプロパティには、コレクションに半ダースのペアがあります
JavaScript データの例を次に示します。
{
foo: true,
bar: false,
baz: {
a: true,
b: false,
c: "maybe"
}
quux: "maybe"
}
次の方法でデータを操作したいと考えています。
- 1 回限りの初期化:データ構造を作成したら、それを読み取るだけでよいので、不変の構造で問題ありません。
- キーの存在の検索:特定のキーがデータに存在するかどうかを判断できる必要があります。よく知られているキーもあれば動的なキーもあるため、実行時まですべての名前がわからないため、文字列を使用してキーを検索する必要があります。上記の例では、 、 、 について事前に知っていると仮定しますが、私にとっては初めて
foo
でbar
あり、それが存在するかどうか、およびフラットな値またはネストされた値を持つかどうかは事前にわかりません。baz
quux
- キーの「フラット」値を取得します。値は
true
であり、 「フラット」メンバーのfalse
「多分」値の数です。string
必要に応じて、これを実際のブール値に変換できます (「多分」値を として扱いますtrue
) が、「多分」値を保持することをお勧めします。すべての「おそらく」値を前もって知ることができると思うので、Enum
それらの値を保持するものを構築し、そこに投げtrue
てfalse
入れて、値の型を 1 つにすることもできます。 - ネストされたデータのキーと値を取得する:一部のキーには、それ自体がキーと値のペアのコレクションである値があります。これらのメンバーを区別し、ネストされたキーとその値を検索できる必要があります。入力データについて私が見たところ、ネストが 1 レベルよりも深くなるとは思いません。
キーが一意であるため、検索の速度と使いやすさから Dictionary に惹かれます。しかし、ネストされたコレクションをフラットな値と一緒に表現することに少し困惑しています。これは、JavaScript のような動的言語ではとてつもなく簡単です。C# で対応するイディオムは何ですか?