MS xsdツールを使用してターゲットxsdに基づいてターゲットモデル(POCO風)を作成し、変換の実装を非表示にするファサードを介してコードの変換を実行します。
変換を簡素化するために、たとえばgithubのAutomapperを使用できます。
ターゲットモデルから、たとえばEntity Frameworkを使用して、XML、JSONを生成したり、データを永続化したりするのは簡単です。
一般的なJSONシリアル化の例:
public static string GetString<T>(T value)
{
using (var ms = new MemoryStream())
{
var ser = new DataContractJsonSerializer(typeof(T));
ser.WriteObject(ms, value);
byte[] json = ms.ToArray();
ms.Close();
return Encoding.UTF8.GetString(json, 0, json.Length);
}
}
私は過去にXSLTルートを試しましたが、それは強力ですが、複雑になる傾向があります。上記のターゲットモデルを使用すると、必要に応じてコンバージョンをデバッグできるようになります。また、今後のさまざまな機会も提供されます。
Re:AutoMapper、ターゲット構造が複雑でソースと異なる可能性があるこのような場合、AutoMapperですべてを直接マッピングするのは難しいので、通常、AutoMapperを内部で使用する全体的な構造/マッピングを担当するOrchestrator/SuperMapperを作成します。
ヒント:ターゲットに複数の値が必要な場合は、同じオブジェクトへの一連のマッピングとして設定することができます。この質問/回答を参照してください。
特定の構造を念頭に置いていない限り、良い一般的な答えを出すのは難しいです。
Re:ファサードウィキペディアにはこのパターンの適切な定義があります>>ウィキペディアのファサード
しかし、要するに、オーケストレーター/ SupperMapperの可能な限り単純なインターフェースを定義して、構造を変換する内部動作をアプリケーションの他の部分から分離します。このようにして、ニーズが変わったときに他のものと簡単に交換できます。このように、アプリの残りの部分はAutoMapperまたはターゲットモデルについて知る必要はありません。それが知っているのは、ソースモデルを入れて、たとえばJsonを取り戻すことを期待することだけです。