1

XML からオブジェクト データをインポートするための一般的なソリューションを設計しています。私のアプリケーションでは、クラス構造は次のようになります。

class MyObject
{
    public string ID { get; private set; }

    // This may contain large set of values.
    public Dictionary<string, OtherClass> ObjectData { get; set; };

    public MyObject()
    {}
}

class OtherClass
{
    public string SubProperty1 { get; set; }
    public string SubProperty2 { get; set; }
    public string SubProperty3 { get; set; }
}

MyObjectインポートする必要があるさまざまなタイプのプロパティを持つ可能性がある、類似した他の多くのクラスが存在する可能性があります。

私が考えているスキーマ設計は、次の XML 構造を生成します。

<BlobData DataType="MyObjectType">
  <DataValues UniqueID="MyObjectID" Property="SerializedPropertyName">
    <DataValue PointID="Point1" SubProperty="SubProperty1">Value1.1</DataValue>
    <DataValue PointID="Point2" SubProperty="SubProperty1">Value1.2</DataValue>
    <DataValue PointID="Point3" SubProperty="SubProperty1">Value1.3</DataValue>
    <DataValue PointID="Point1" SubProperty="SubProperty2">Value2.1</DataValue>
    <DataValue PointID="Point2" SubProperty="SubProperty2">Value2.2</DataValue>
    <DataValue PointID="Point3" SubProperty="SubProperty2">Value2.3</DataValue>
  </DataValues>
</BlobData>

この構造が将来の作業に十分であるかどうか、私はまだ混乱しています. 似たようなものを設計した経験がある場合は、提案してください。

4

2 に答える 2

0

別のデータ (Xml 形式) を使用している場合、私は自分の作業で次のことを行いました。

  • 各 xml データが XSD (スキーマ) によってサポートされていることを確認します。
  • その後、XSD.exe を使用してスキーマを CS に変換できます。
  • C# では、そのデータ モデルを直接操作します (を使用して Xml から C# に逆シリアル化しますXmlSerializer) 。
  • そうすれば、Xml 要素と属性を解析するのではなく、主に DataModel (C# に相当) に集中できます。

すべてのシナリオで機能するわけではありませんが、スキーマが下位互換性があるほとんどの場合に機能する可能性があります

于 2012-05-14T10:50:13.357 に答える
0

すべてのクラスの構造が似ている場合 (ID + いくつかのサブプロパティなど)、辞書の代わりにリスト/セット/その他のコレクションを使用します。コレクションには、Id (PointID?)、サブプロパティの名前、および値の 3 つの値を持つ一般的なサブプロパティ タイプ/クラスが含まれます。

マップ元のキーが一意の場合は辞書を使用してください(例の文字列キーが何であるかはわかりません)

于 2012-05-14T10:51:21.493 に答える