Get OData $metadata in JSON format的答案表明默认情况下OData无法将元数据作为JSON返回。
但是有可能捕获或挂钩其对$metadata
URL的响应,然后在将其发送到客户端之前将其转换为JSON吗?
我想像这样的伪代码:
[HttpGet]
[ODataRoute("$metadata")]
public string GetMetadataAsJson()
{
string xml = GetOdataMetadataAsXML();
string json = ConvertToJson(xml);
return json;
}
我不知道如何正确实现它,特别是我不知道如何将标准OData响应作为字符串,以及如何挂钩$metadata
URL。
答案 0 :(得分:1)
Newtonsoft 支持 Json 部分结帐 https://www.newtonsoft.com/json/help/html/ConvertXmlToJson.htm
因此,Json 部分的实际解决方案将非常简单,只要您拥有 XML
[HttpGet]
[ODataRoute("$metadata")]
public string GetMetadataAsJson()
{
string xml = GetOdataMetadataAsXML();
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string json = JsonConvert.SerializeXmlNode(doc);
return json;
}
此外,您可能应该首先检查是否例如例如,使用此代码设置格式查询
[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;
}