1

タイトルで C# について言及していますが、これは一般的なプログラミングの質問です。私は、次のことを行うための最良のアプローチを見つけようとしています。

次のフィールドを含む tableA があります

ID : 1
ProjectName : "Test"
City : "NY"
Size : 100
Location : "USA"

ここで、サード パーティ アプリケーション用にそのテーブルをシリアル化する必要がありますが、アプリケーションは一般的なデータ コントラクト (以下を参照) を使用し、さらにフィールド名を少し変更する必要があります。したがって、上記のテーブルは次のようにシリアル化されます。

<Object>
<type>Project</type>
<Fields>
<Key>NameofProject</Key><Value>Test</value>
<Key>ProjectCity</Key><Value>NY</value>
<Key>ProjectLocation</Key><Value>USA</value>
</Fields>
</Object>

ご覧のとおり、TableA のフィールドを新しいフィールド名/キーにマップする必要がありました。

ProjectName -> NameofProject
City -> ProjectCity
Location ->ProjectLocation

これは私が上記を達成する方法です: - 上記のマッピング関係を格納するマッピング テーブルを作成します。

InputField -> OutputKey
ProjectName -> NameofProject
City -> ProjectCity
Location ->ProjectLocation

I would then load the data from this table into a Set
I would then loop through each row of the input
- for each column in the row I would get the OutputKey based on the InputField as stored in my mapping Set, and build the xml

Set に少量の情報を保存してから、各フィールドのルックアップを実行することはそれほど悪いことではないと思います。しかし、私は経験豊富な C# ユーザーではないので、C# でこれを行うためのより良い方法があるかどうか疑問に思っています。どんな助けや指示も大歓迎です。

編集: XSLT の使用を提案したコメント - 良いアイデアですが、このタスクの他の複雑さのために、データ コントラクトに基づいてコードで xml を構築する方が良いでしょう。入力データ テーブルとマッピング テーブルの SQL 結合を介してマッピングを達成する方法はありますか?

4

1 に答える 1

1

DataContractSerializerマッピングのセットが固定されている場合、次のサンプルのように、または を使用しXmlSerializerて、メンバーを別の名前で装飾することで、これを行うことができます。

前者は を使用DataContractSerializerし、後者はXmlSerializer

[DataContract]
public class Project
{
    [DataMember(Name = "NameOfTheProject")]
    public string ProjectName { get; set; }

    [DataMember(Name = "ProjectLocation")]
    public string Location { get; set; }
}

[Serializable]
public class Project1
{
    [System.Xml.Serialization.XmlAttribute(AttributeName = "ProjectName")]
    public string ProjName { get; set; }
}

ここでわかるように、モデルはテーブル構造を模倣し、属性は、シリアル化されたときにプロパティのカスタム名でデータを表示するために使用されます。

于 2013-05-05T11:38:41.770 に答える