我有一个带有以下操作签名的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。
如果我将SearchParameters Type替换为没有Xml Serialization属性的POCO,它可以正常使用JSON。 这让我认为由于xml序列化属性,JsonMediaTypeFormatter无法正确匹配属性(即使这不重要,因为它的JSON,而不是XML吗?)。 我改变了JsonFormatter以使用DataContract Serializer,但这没有任何区别。
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属性而表现不同?
答案 0 :(得分:1)
发布此JSON并查看。
{"_searchCodes":[
"SYAA113F",
"N0TEXI5T",
"SYAA112C"]
}
请务必设置Content-Type: application/json
。