【问题标题】:How can I transform an object graph to an external XML format如何将对象图转换为外部 XML 格式
【发布时间】:2018-04-17 00:20:36
【问题描述】:

我必须以他们指定的 XML 格式向第三方发送信息,我敢肯定这是一项非常常见的任务。

我有一组 XSD 文件,并使用 XSD.exe 创建了一组类型。为了生成 XML,我将域中类型的值映射到第 3 方类型:

public ExternalBar Map(InternalFoo foo) {
    var bar = new ExternalBar;

    bar.GivenName = foo.FirstName;
    bar.FamilyName = foo.LastName;

    return bar;

}

然后我将使用 XMLSerializer 生成文件,可能会在发布它们之前根据 XSD 检查它们。

虽然这种方法非常手动,但我想知道是否有更好的方法使用框架或外部工具来映射数据和创建文件。

【问题讨论】:

  • 手动?您想只使用拖放来生成它吗?
  • @Grzenio,不是通过拖放。我想知道框架内是否有工具可以帮助我不知道,例如System.Xml.Linq 命名空间。

标签: c# xml-serialization


【解决方案1】:

LINQ to XML 非常适合这个...例如

XElement results = new XElement("ExternalFoos",
    from f in internalFoos
    select new XElement("ExternalFoo", new XAttribute[] {
        new XAttribute("GivenName", f.FirstName),
        new XAttribute("FamilyName", f.LastName) } ));

【讨论】:

    【解决方案2】:

    首先,我假设您现有域中的对象属性无需太多操作即可映射到第 3 方类型,除了重复的属性分配。

    所以我建议只使用域树的标准 XML 序列化(使用 XSD 为您的类生成出站模式),然后通过一组 XSLT 样式表对结果进行后处理。然后在后处理之后,根据第 3 方模式验证生成的 XML 文档。

    它可能会比这更复杂,因为它确实取决于对象域之间映射的复杂性,但这是我过去成功使用的一种方法。

    就 GUI 工具而言,我听说(但我自己没有使用过)Stylus Studio 非常适合模式到模式的映射(屏幕截图 here)。

    【讨论】:

      猜你喜欢
      • 2014-08-29
      • 2016-12-14
      • 2020-08-30
      • 1970-01-01
      • 2014-07-07
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多