Asp.net web api 如何在不删除XML序列化程序的情况下将默认序列化程序设置为JSON

Asp.net web api 如何在不删除XML序列化程序的情况下将默认序列化程序设置为JSON,asp.net-web-api,asp.net-web-api2,Asp.net Web Api,Asp.net Web Api2,是否可以使JSON成为WebApi2中的默认序列化程序,而不删除XML序列化程序 我曾尝试将XmlSerializer置于后面,将JsonSerializer置于前面,但似乎没有任何变化。默认情况下,json格式化程序应该“赢”。 有几件事决定了格式化程序将“获胜” 如果JSON格式化程序甚至可以编写您的类型,您可能需要首先验证这一点。如果您使用DataContractSerializer,它会有点挑剔,json.net版本会表现得更好(这是默认版本) 如果您没有AcceptHeader,那么内

是否可以使JSON成为WebApi2中的默认序列化程序,而不删除XML序列化程序


我曾尝试将XmlSerializer置于后面,将JsonSerializer置于前面,但似乎没有任何变化。

默认情况下,json格式化程序应该“赢”。 有几件事决定了格式化程序将“获胜”

  • 如果JSON格式化程序甚至可以编写您的类型,您可能需要首先验证这一点。如果您使用DataContractSerializer,它会有点挑剔,json.net版本会表现得更好(这是默认版本)
  • 如果您没有AcceptHeader,那么内容协商者仍然会查看请求的内容类型,并且更愿意这样做。您的请求是否正在发送XML
  • 如果这两个问题都不是问题,那么内容协商者(
    defaultcontentcongregator
    )现在将以XML和JSON格式化程序结束,并调用
    SelectResponseMediaTypeFormatter

    在这里,它基本上会选择列表中的第一个格式化程序(我用一个caviat来表示,因为它有点复杂),因此您需要验证您的列表是否按照预期的顺序重新排序


    最后,我不认为您需要这样做,因为上面的内容应该可以修复,您可以随时替换IContentNegotiator并覆盖SelectResponseMediaTypeFormatter,如果您有多个格式化程序,您可以选择Json格式。

    我的理解是,这与客户端在accept标头中发送的内容有更多关系。如果XML是accept头中的第一个内容,并且XML序列化程序存在,那么您将得到它。@CraigW。但若客户机什么也不发送呢?