sas*_*alm 11 c# json odata asp.net-web-api
以JSON格式获取OData $元数据的答案表明OData默认情况下不能将元数据作为JSON返回.
但是,是否有可能捕获或挂钩其对$metadataURL的响应,然后在将其发送到客户端之前将其转换为JSON?
我想像这样的伪代码:
[HttpGet]
[ODataRoute("$metadata")]
public string GetMetadataAsJson()
{
string xml = GetOdataMetadataAsXML();
string json = ConvertToJson(xml);
return json;
}
Run Code Online (Sandbox Code Playgroud)
我不知道如何正确实现它,特别是我不知道如何将标准OData响应作为字符串,以及如何挂钩$metadataURL.
Newtonsoft支持Json部分签出https://www.newtonsoft.com/json/help/html/ConvertXmlToJson.htm
因此,只要您拥有 XML,Json 部分的实际解决方案就会非常简单
[HttpGet]
[ODataRoute("$metadata")]
public string GetMetadataAsJson()
{
string xml = GetOdataMetadataAsXML();
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string json = JsonConvert.SerializeXmlNode(doc);
return json;
}
Run Code Online (Sandbox Code Playgroud)
另外,您可能应该首先检查是否使用此代码设置了格式查询
[HttpGet]
[ODataRoute("$metadata")]
public string GetMetadataAsJson([FromQuery(Name="Format")]string format)
{
string metaResult = GetOdataMetadataAsXML();
if(format.Equals("json",StringComparison.OrdinalIgnoreCase))
{
XmlDocument metaDoc = new XmlDocument();
doc.LoadXml(metaResult);
metaResult = JsonConvert.SerializeXmlNode(doc);
}
return metaResult;
}
Run Code Online (Sandbox Code Playgroud)