新しいMVCWebAPIでラップしたいレガシーWebサービスがあります。質問は、ASP.NET WebAPIでxmlをjsonに変換できるかどうかです。
XDocumentを使用して動的オブジェクトを作成し、それを返すことを考えていましたが、ExpandoObjectで試してみると、残念ながら、キーと値のペアを持つjsonオブジェクトが返されました。
新しいMVCWebAPIでラップしたいレガシーWebサービスがあります。質問は、ASP.NET WebAPIでxmlをjsonに変換できるかどうかです。
XDocumentを使用して動的オブジェクトを作成し、それを返すことを考えていましたが、ExpandoObjectで試してみると、残念ながら、キーと値のペアを持つjsonオブジェクトが返されました。
json.NETを使用すると、簡単に実行できます。
string result = Newtonsoft.Json.JsonConvert.SerializeXmlNode(xmldocument);
Newtonsoft.Jsonをhttp://james.newtonking.com/pages/json-net.aspxからダウンロードします
あなたは出来る。これを行う1つの方法は、XMLをオブジェクトに逆シリアル化してから、それらを再びJSONにシリアル化することです。
より効率的な(コード化のアプローチは難しいですが)は、XMLを読み込んでJSONを吐き出す独自のxml-to-json「transcriber」を作成することです。
すべての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;
}
}
Register関数内のWebApiConfigファイルに、最後に以下のコードを追加します(WebApiConfigファイルはApp_Startフォルダーにあります)
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/html"));
config.Formatters.Remove(config.Formatters.XmlFormatter);