0

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 回限りの初期化:データ構造を作成したら、それを読み取るだけでよいので、不変の構造で問題ありません。
  • キーの存在の検索:特定のキーがデータに存在するかどうかを判断できる必要があります。よく知られているキーもあれば動的なキーもあるため、実行時まですべての名前がわからないため、文字列を使用してキーを検索する必要があります。上記の例では、 、 、 について事前に知っていると仮定しますが、私にとっては初めてfoobarあり、それが存在するかどうか、およびフラットな値またはネストされた値を持つかどうかは事前にわかりません。bazquux
  • キーの「フラット」値を取得します。値はtrueであり、 「フラット」メンバーのfalse「多分」値の数です。string必要に応じて、これを実際のブール値に変換できます (「多分」値を として扱いますtrue) が、「多分」値を保持することをお勧めします。すべての「おそらく」値を前もって知ることができると思うので、Enumそれらの値を保持するものを構築し、そこに投げtruefalse入れて、値の型を 1 つにすることもできます。
  • ネストされたデータのキーと値を取得する:一部のキーには、それ自体がキーと値のペアのコレクションである値があります。これらのメンバーを区別し、ネストされたキーとその値を検索できる必要があります。入力データについて私が見たところ、ネストが 1 レベルよりも深くなるとは思いません。

キーが一意であるため、検索の速度と使いやすさから Dictionary に惹かれます。しかし、ネストされたコレクションをフラットな値と一緒に表現することに少し困惑しています。これは、JavaScript のような動的言語ではとてつもなく簡単です。C# で対応するイディオムは何ですか?

4

1 に答える 1

0

C# で実際に対応する構造は、匿名オブジェクト/クラスになります。私は個人的にディクショナリを使用することを好みます。オブジェクトを値の型として使用するか (次に、キーの値が別のディクショナリかどうかを確認して、ネストされたコレクションがあるかどうかを確認します)、またはラッパー クラスを使用します。ディクショナリまたはフラット値を保持し、IsNestedCollection などのいくつかのフィールドと必要なものがあります。

于 2013-03-18T20:51:16.867 に答える