Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在azure函数中禁用XML序列化_C#_Json_Azure_Serialization_Azure Functions - Fatal编程技术网

C# 如何在azure函数中禁用XML序列化

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 是否有办法删除或

当我从浏览器访问azure函数(C#
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,请停止请求它。不要试图破坏服务器,修复客户端