C# 如何在azure函数中禁用XML序列化
当我从浏览器访问azure函数(C#C# 如何在azure函数中禁用XML序列化,c#,json,azure,serialization,azure-functions,C#,Json,Azure,Serialization,Azure Functions,当我从浏览器访问azure函数(C#HttpTrigger)时,我得到一个带有错误消息的XML响应,而不是JSON响应 这是意料之中的,因为响应中包含一个JObject,可以很好地序列化为JSON,但不能序列化为XML,并且浏览器的Accept头要求首选XML而不是JSON 我可以通过摆弄浏览器的Accept头(插入application/json;q=0.95)来使用变通方法获得正确的响应,但我真正想要的是在Azure函数中禁用XML序列化,因为我的函数无论如何都不兼容XML 是否有办法删除或
HttpTrigger
)时,我得到一个带有错误消息的XML响应,而不是JSON响应
这是意料之中的,因为响应中包含一个JObject,可以很好地序列化为JSON,但不能序列化为XML,并且浏览器的Accept头要求首选XML而不是JSON
我可以通过摆弄浏览器的Accept头(插入application/json;q=0.95
)来使用变通方法获得正确的响应,但我真正想要的是在Azure函数中禁用XML序列化,因为我的函数无论如何都不兼容XML
是否有办法删除或禁用Azure函数中的XML格式化程序,使其“忘记”可以序列化为XML,并且忽略请求头中的任何
application/XML
?相反,让JSON格式化程序优先,尽管请求更喜欢XML?经过一番挖掘,我找到了一个可行的答案。事实证明,HttpRequestMessageExtensions.CreateResponse
扩展方法(扩展HttpRequestMessage
)有几个重载,其中一些重载允许显式指定生成的媒体类型
所以不是
return req.CreateResponse(HttpStatusCode.OK, returnObject);
我不得不写信
return req.CreateResponse(HttpStatusCode.OK, returnObject, "application/json");
获取我想要的行为。返回实际的POCO,而不是序列化程序的类。Json只是一个具有特定格式的字符串。它可以像任何其他字符串一样添加到XML文档中<另一方面,code>JObject不是Json字符串,而是一个特定序列化库使用的对象。这相当于尝试返回一个XmlDocument。就像在ASP.NET MVC或Web API中一样,返回一个POCO,让框架决定如何基于请求的格式进行序列化。此外,如果不需要XML,请停止请求它。不要试图破坏服务器,修复客户端