Массив JSon закодирован в 1 случае, но не в другом - PullRequest
0 голосов
/ 09 октября 2018

В моем веб-API есть 2 метода, которые оба используют HttpPost и оба передают один и тот же объект в объекте - SearchCriteria

    [HttpPost]
    [ActionName("GetBySearchCriteria")]
    public async Task<IActionResult> GetBySearchCriteriaAsync([FromBody] SearchCriteria searchCriteria)
    {
        var data = JsonConvert.SerializeObject(searchCriteria);
        var result = await PostAsync("GetBySearchCriteria", data).ConfigureAwait(false);
        return result;
    }

Этот метод отлично работает и возвращает массив объектов

   [{
        "property1": null,
        "property2": null,
        "property3": "Property 3 Value"
    }, {
        "property1": null,
        "property2": null,
        "property3": "Property 3 Value"
    }, {
        "property1": null,
        "property2": null,
        "property3": "Property 3 Value"
    }, {
        "property1": null,
        "property2": null,
        "property3": "Property 3 Value"
    }, {
        "property1": null,
        "property2": null,
        "property3": "Property 3 Value"
    }, {
        "property1": null,
        "property2": null,
        "property3": "Property 3 Value"
    }, {
        "property1": null,
        "property2": null,
        "property3": "Property 3 Value"
    }, {
        "property1": null,
        "property2": null,
        "property3": "Property 3 Value"
    }
]

В моем Delphi-клиенте это будет отлично разбираться в массив

Теперь у меня есть второй метод с такой же сигнатурой

 [HttpPost]
 [ActionName("GetItemsForSearchCriteria")]
 public async Task<IActionResult> GetItemsForSearchCriteriaAsync([FromBody] SearchCriteria searchCriteria)
 {
     var data = JsonConvert.SerializeObject(searchCriteria);
     var result = await PostAsync("GetItemsForSearchCriteria", data).ConfigureAwait(false);
     return new JsonResult(result);
 }

Ответ на этот раз бесполезен, так как егообернутый внутри другого объекта

{
    "value": "[{\"property1\":\"acd84fe8-918f-11e8-9c80-02e80462a44f\",\"property2\":\"acd84fe8-918f-11e8-9c80-02e80462a44f\",\"property3\":\"property3value\"}]",
    "formatters": [],
    "contentTypes": [],
    "declaredType": null,
    "statusCode": 200
}

Объект, передаваемый обратно во втором методе, является более сложным, но я намеренно добавил JsonIgnore в свойства, чтобы посмотреть, вызывает ли это проблему, и не вызывает ли это

Кто-нибудь знает, почему это не возвращается в том же формате, что и первый метод?

Я не вижу никакой разницы между способом вызова этих методов

Я не хочу, чтобы вызывающая сторона виделакод ответа и т. д.

Я все это проверил с помощью почтальона, поэтому знаю, что проблема не в клиентской стороне

Не может быть ничего плохого в моем методе PostAsync, так как метод 1 также вызывает его, и там все в порядке

Пол

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...