【问题标题】:Can Web API convert XML into Json?Web API 可以将 XML 转换为 Json 吗?
【发布时间】:2012-03-18 03:11:45
【问题描述】:

我有一个旧的 Web 服务,我想用新的 MVC Web API 包装它,问题是我可以让 ASP.NET Web API 将我的 xml 转换为 json 吗?

我的一个想法是使用 XDocument 创建一个动态对象并返回它,但是当我使用 ExpandoObject 尝试它时,不幸的是它返回了一个带有键/值对的 json 对象。

【问题讨论】:

    标签: asp.net wcf-web-api asp.net-mvc-4 asp.net-web-api


    【解决方案1】:

    使用 json.NET 你可以轻松做到:

    string result = Newtonsoft.Json.JsonConvert.SerializeXmlNode(xmldocument);
    

    http://james.newtonking.com/pages/json-net.aspx下载Newtonsoft.Json

    【讨论】:

    • 是的,这是我最初的想法,但我希望这可以通过 web api 完成,以便根据使用的数据类型(xml 或 json),ApiController 将返回正确的格式.. .
    • Web API 确实执行内容协商,这意味着它将返回最适合客户端想要获得的表示。但是,它没有用于将 XML 文档直接转换为 JSON 表示的内置工具。
    【解决方案2】:

    你可以。一种方法是将 XML 反序列化为对象,然后将它们再次序列化为 JSON。

    一种更有效(尽管更难编码的方法)是编写自己的 xml-to-json “转录器”,它读取 XML 并输出 JSON。

    请注意,并非所有 XML 都可以轻松地表示为 JSON。

    【讨论】:

      【解决方案3】:

      事实证明,这可以通过将 XDocument 转换为动态 JsonObject 来完成,如下所示:

      var doc = XDocument.Load(uri);
      foreach (var node in doc.Root.Descendants()) {
         var obj = (dynamic) new JsonObject();
         foreach (var child in node.Descendants())
         {
            obj[child.Name.LocalName] = child.Value;
            yield return obj;
         } 
      }
      

      【讨论】:

        【解决方案4】:

        在Register函数里面的WebApiConfig文件中最后添加下面的代码(WebApiConfig文件在App_Start文件夹中)

        config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/html"));
        

        【讨论】:

          【解决方案5】:
                  config.Formatters.Remove(config.Formatters.XmlFormatter);
          

          【讨论】:

          • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常质量更高,更有可能吸引投票。
          猜你喜欢
          • 1970-01-01
          • 2022-08-17
          • 1970-01-01
          • 2015-09-21
          • 1970-01-01
          • 1970-01-01
          • 2013-10-24
          • 2012-03-23
          • 2018-01-16
          相关资源
          最近更新 更多