【问题标题】:Convert simple JSON / XML to XML with namespaces in C# .NET在 C# .NET 中使用命名空间将简单的 JSON/XML 转换为 XML
【发布时间】:2012-05-18 17:14:53
【问题描述】:

将 json(或简单的 XML)转换为带有命名空间(或带有特定模式)的 XML,不使用强类型类 (C#) 的最佳方法是什么? (使用 XSD、XSLT、模板引擎或其他基于文本的引擎)。

什么是最有效的方式(资源/性能)?

例如,在json中取如下对象-字符串:

{
  'item': {
    'name': 'item #1'
    'code': 'itm-123'
    'image': {
      '@url': 'http://www.foo.com/bar.jpg'
    }
  }
}

并将其转换为:

<foo:item>
    <foo:name>item #1</foo:name>
    <foo:code>itm-123</foo:code>
    <foo:image url="http://www.foo.bar"/>
</foo:item>

(对象可以比上面的例子更复杂)

谢谢

【问题讨论】:

    标签: c# .net xml json


    【解决方案1】:

    您可以使用 json.net 来执行此操作。 阅读其他post

    它显示相反的方式,但应该几乎相同。

    【讨论】:

    • 我无法使用 json.net 将命名空间添加到 XML,或者决定 XML 方案 (james.newtonking.com/projects/json/help/…),转换仅取决于 json 字符串。
    • 你可以尝试使用带有 json.net 的动态对象:stackoverflow.com/questions/10022731/…
    • -1;不回答问题。 Json.net 没有正确处理 XML 命名空间(即根本没有)
    • 我收回了 - 它确实如此,但要找出方法是一个魔鬼,因为它似乎没有在任何地方记录。
    【解决方案2】:

    使用Cinchoo ETL,一个开源库,这个转换可以很容易地完成,如下所示

    string json = @"
    {
      'item': {
        'name': 'item #1',
        'code': 'itm-123',
        'image': {
          '@url': 'http://www.test.com/bar.jpg'
        }
      }
    }";
    
    StringBuilder xml = new StringBuilder();
    using (var r = ChoJSONReader.LoadText(json))
    {
        using (var w = new ChoXmlWriter(xml)
            .IgnoreRootName()
            .IgnoreNodeName()
            .WithDefaultXmlNamespace("foo", "http://temp.com")
            )
        {
            w.Write(r);
        }
    }
    
    Console.WriteLine(xml.ToString());
    

    输出:

    <foo:item xmlns:foo="http://temp">
      <foo:name>item #1</foo:name>
      <foo:code>itm-123</foo:code>
      <foo:image url="http://www.test.com/bar.jpg" />
    </foo:item>
    

    小提琴示例: https://dotnetfiddle.net/MITsuL

    免责声明:我是这个库的作者。

    【讨论】:

    • 如果内部节点有其他命名空间怎么办?这是 lib 中的一种可能性吗?
    • 是的,有可能。
    • 您能否分享任何文档以向内部/子节点添加不同的命名空间?我无法在当前文档中找到
    • 谢谢,如果在所需的 JSON 节点中提到 @xmlns:namespace,它也可以工作
    猜你喜欢
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 2022-10-05
    • 2015-08-15
    • 2014-06-09
    • 1970-01-01
    相关资源
    最近更新 更多