Web API中具有XML序列化属性的JSON模型绑定

Web API中具有XML序列化属性的JSON模型绑定,json,asp.net-web-api,xml-serialization,json.net,Json,Asp.net Web Api,Xml Serialization,Json.net,我有一个具有以下操作签名的API控制器 [HttpPost] public HttpResponseMessage DoSearch(SearchParameters parameters) SearchParameters不是我可以修改的,反编译的源代码如下所示 [DebuggerStepThrough] [XmlRoot("SearchData", IsNullable = false, Namespace = "http://company.com/some/namespace/v

我有一个具有以下操作签名的API控制器

[HttpPost]
public HttpResponseMessage DoSearch(SearchParameters parameters)
SearchParameters
不是我可以修改的,反编译的源代码如下所示

 [DebuggerStepThrough]
  [XmlRoot("SearchData", IsNullable = false, Namespace = "http://company.com/some/namespace/v1")]
  [GeneratedCode("xsd", "2.0.50727.3038")]
  [DesignerCategory("code")]
  [XmlType(Namespace = "http://company.com/some/namespace/v1")]
  [Serializable]
  public class SearchParameters
  {
    private string[] _searchCodes;

    [XmlArrayItem("SearchCode", IsNullable = false)]
    public string[] SearchCodes
    {
      get
      {
        return this._searchCodes;
      }
      set
      {
        this._searchCodes = value;
      }
    }
  }
我可以使用XML负载成功地调用端点,但根本无法让JSON工作。SearchCodes属性始终为空

如果我将SearchParameters类型替换为一个没有Xml序列化属性的POCO,那么它可以很好地处理JSON。 这让我想到,由于xml序列化属性,JsonMediaTypeFormatter无法正确匹配属性(即使这不重要,因为它是JSON,而不是xml,对吗?)。 我将JsonFormatter更改为使用DataContract序列化程序,但这没有任何区别

httpConfiguration.Formatters.JsonFormatter.UseDataContractJsonSerializer=true

我尝试制作不同的JSON结构,看看是否能“帮助”它理解,但这些都不管用

{
    "SearchData": {
        "SearchCodes": {
            "SearchCode": [
                "SYAA113F",
                "N0TEXI5T",
                "SYAA112C"
            ]
        }
    }
}


{
    "SearchCodes": {
        "SearchCode": [
            "SYAA113F",
            "N0TEXI5T",
            "SYAA112C"
        ]
    }
}

{
    "SearchCodes":  [
            "SYAA113F",
            "N0TEXI5T",
            "SYAA112C"
        ]
}


{
    "SearchData": {
        "SearchCode": [
            "SYAA113F",
            "N0TEXI5T",
            "SYAA112C"
        ]
    }
}


{
    "SearchCode": [
        "SYAA113F",
        "N0TEXI5T",
        "SYAA112C"
    ]
}

{
    "SearchCodes":  [
            { "SearchCode" : "SYAA113F" },
            { "SearchCode" : "SYAA113F" },
            { "SearchCode" : "SYAA113F" }
        ]
}
我如何进一步调试它?我错过了什么?
是什么原因导致JSON媒体格式化程序因XML属性而表现不同?

发布此JSON并查看

{"_searchCodes":[
        "SYAA113F",
        "N0TEXI5T",
        "SYAA112C"]
}

请记住设置
内容类型:application/json

发布此json并查看

{"_searchCodes":[
        "SYAA113F",
        "N0TEXI5T",
        "SYAA112C"]
}

请记住设置
内容类型:application/json

。它究竟为什么接受绑定的支持字段?因为XML序列化属性。这是一种享受。它究竟为什么接受绑定的支持字段?因为XML序列化属性。