使用MS xsd 工具基于目标 xsd 创建目标模型(POCO-ish),并通过隐藏翻译实现的外观在代码中进行转换。
为了简化转换,您可以使用例如github 上的 Automapper。
从目标模型可以很容易地生成 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 路线,虽然它很强大,但它往往会很快变得复杂。使用上面的目标模型,您将能够在需要时调试您的转换,它还为您提供了一系列前进的机会。
回复: AutoMapper,在这种情况下,当目标结构很复杂并且可能与源不同时,很难让 AutoMapper 直接映射所有内容,我通常会创建一个 Orchestrator/SuperMapper 负责内部使用 AutoMapper 的整体结构/映射.
提示:如果一个目标需要多个值,可以将其设置为同一个对象的一系列映射,请参阅此问题/答案。
如果没有考虑到特定的结构,很难给出一个好的通用答案。
Re: Facade Wikipedia 对这种模式有一个很好的定义 >> Facade on Wikipedia
但简而言之,为您的 Orchestrator/SupperMapper 定义最简单的接口,这样您就可以将翻译结构的内部工作与应用程序的其余部分分开。这样,当您的需求发生变化时,您可以轻松地将其换成其他东西。这样,您的应用程序的其余部分不需要了解 AutoMapper 或目标模型。它所知道的只是放入源模型并期望返回 Json。