我有一个简单的复杂对象,即WebAPI V2未按预期完全反序列化。我正在使用[FromUri]属性来确保从URI反序列化模型,正如您在下面看到的那样,序列化可以起作用,但是不完整。
为简洁起见,我删除了注释和空参数构造函数
模特
public class ClientSuggestRequestModel
{
public string SearchText { get; set; }
public int Limit { get; set; }
public List<string> Fields { get; set; }
public List<SearchTerm> SearchTerms { get; set; }
}
public class SearchTerm
{
public string Field { get; set; }
public string Term { get; set; }
}
WebAPI V2 Controller操作:
public IEnumerable<SuggestionModel> GetSuggestResults([FromUri]string resourceType, [FromUri]ClientSuggestRequestModel requestData)
{
/* body removed for brevity */
}
正在进行的请求是正确的,因为Angular序列化程序正在按预期运行。
http://localhost/api/SearchSuggest/asset/Feline?fields=FIELD.TITLE&fields=FIELD.ASSET_TYPE&limit=5&searchTerms=%7B%22Field%22%3A%22FIELD.TITLE%22%2C%22Term%22%3A%22Cats%22%7D&searchTerms=%7B%22Field%22%3A%22FIELD.ASSET_TYPE%22%2C%22Term%22%3A%22Poster%22%7D
WebAPI V2操作导致序列化模型如下:
ACTUAL:
{
SearchText: "Feline",
Limit: 5,
Fields: [
"FIELD.TITLE",
"FIELD.ASSET_TYPE"
],
SearchTerms: [
{
Field: null,
Term: null
},
{
Field: null,
Term: null
},
]
}
预期:
{
SearchText: "Feline",
Limit: 5,
Fields: [
"FIELD.TITLE",
"FIELD.ASSET_TYPE"
],
SearchTerms: [
{
Field: "FIELD.TITLE",
Term: "Cats"
},
{
Field: "FIELD.ASSET_TYPE",
Term: "Poster"
},
]
}
问题:我需要做些什么来确保'SearchTerm'模型填充了值?它显然知道那里的字段并创建了一个预期长度的数组。每个对象的值都为null,而不是预期的值。