2

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

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

例如,在 json - string 中取以下对象:

{
  '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>

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

谢谢

4

2 回答 2

1

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

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

于 2012-05-10T10:52:35.870 回答
0

使用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

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

于 2021-09-12T17:52:05.780 回答