我有一个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属性始终为null。
如果我用一个没有Xml序列化属性的POCO替换SearchParameters Type,那么它可以很好地使用JSON。这让我认为JsonMediaTypeFormatter由于xml序列化属性而无法正确匹配属性(尽管这无关紧要,因为它是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"]
}
记住设置Content-Type: application/json
。