我有一个旧的 Web 服务,我想用新的 MVC Web API 包装它,问题是我可以让 ASP.NET Web API 将我的 xml 转换为 json 吗?
我的一个想法是使用 XDocument 创建一个动态对象并返回它,但是当我使用 ExpandoObject 尝试它时,不幸的是它返回了一个带有键/值对的 json 对象。
我有一个旧的 Web 服务,我想用新的 MVC Web API 包装它,问题是我可以让 ASP.NET Web API 将我的 xml 转换为 json 吗?
我的一个想法是使用 XDocument 创建一个动态对象并返回它,但是当我使用 ExpandoObject 尝试它时,不幸的是它返回了一个带有键/值对的 json 对象。
使用 json.NET 你可以轻松做到:
string result = Newtonsoft.Json.JsonConvert.SerializeXmlNode(xmldocument);
在http://james.newtonking.com/pages/json-net.aspx下载 Newtonsoft.Json
你可以。一种方法是将 XML 反序列化为对象,然后将它们再次序列化为 JSON。
一种更有效的(尽管更难编码的方法)是编写自己的 xml-to-json “转录器”,它读取 XML 并输出 JSON。
请注意,并非所有 XML 都可以轻松地表示为 JSON。
事实证明,这可以通过将 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;
}
}
在注册函数内的 WebApiConfig 文件中,最后添加以下代码(WebApiConfig 文件位于 App_Start 文件夹中)
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/html"));
config.Formatters.Remove(config.Formatters.XmlFormatter);