Get方法上的Web API复杂对象

时间:2014-08-07 19:04:51

标签: asp.net-web-api get deserialization query-string asp.net-web-api2

我有一个简单的复杂对象,即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,而不是预期的值。

0 个答案:

没有答案