Сериализация объекта JSON для передачи на содержимое String не работает, но String Literal работает при отправке запроса POST (ошибка 400) - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь отправить POST-запрос в веб-сервис.Я могу успешно сделать это в консольном приложении, с фиктивным строковым литералом запроса.Тем не менее, когда я пытаюсь сериализовать свой объект с помощью jsonConvert и отправить его в качестве запроса, сервер отвечает ошибочным запросом «400».

My String Literal:

            string invoiceRequest = @"{
""DateAndTimeOfIssue"": ""2017-06-15T08:56:23.286Z"",
""Cashier"": ""Oliver"",
""IT"": 3,
""TT"": 0,
""PaymentType"": ""Cash"",
""InvoiceNumber"": ""POS2017/998"",
""ReferentDocumentNumber"": ""ABCD1234-EFGH5678-198"",
""ReferentDocumentDateAndTime"": ""2017-06-07T09:33:52.187Z"",
""PAC"":""11111"",
    ""Options"":{
        ""OmitQRCodeGen"": ""1"",
        ""OmitTextualRepresentation"": ""1""},
     ""Items"": [{
        ""Name"": ""Sport-100 Helmet, Blue"",
        ""Quantity"": 2.0,
        ""UnitPrice"": 34.23,
        ""Labels"": [""A""],
        ""TotalAmount"": 68.46},
        {
        ""Name"": ""Sport-100 Helmet, Blue"",
        ""Quantity"": 2,
        ""UnitPrice"": 34.23,
        ""Labels"": [""A""],
        ""TotalAmount"": 68.46}],
""Hash"": ""W33lEEgkSRsqTFMO86a8Og==""}";

MyКод:

    HttpContent httpContent = new StringContent(invoiceRequest, Encoding.UTF8, "application/json");
    HttpClient client;
    HttpClientHandler handler;
    GetClientAndHandler(out handler, out client);
    var response = client.PostAsync($"api/Sign/SignInvoice", httpContent).Result;

Выше работает отлично.Однако теперь вместо этого я хотел бы сделать следующее:

HttpContent httpContent = new StringContent((JsonConvert.SerializeObject(this).ToString()), Encoding.UTF8, "application/json");

По какой-то причине вышеописанное не работает (даже если я удалю ToString ()).Ниже приведено то, что я получаю при выводе JsonConvert.SerializeObject (this) в файл.

{
    "DataAndTimeOfIssue": "2017-06-15T08:56:23.286Z",
    "Cashier": "Kushal",
    "IT": "Training",
    "TT": "Sale",
    "PaymentType": "Cash",
    "InvoiceNumber": "POS2017/998",
    "ReferentDocumentNumber": "ABCD1234-EFGH5678-198",
    "ReferentDocumentDateAndTime": "2017-06-07T09:33:52.187Z",
    "PAC": "11111",
    "Options": {
        "OmitQRCodeGen": "1",
        "OmitTextualRepresentation": "0"
    },
    "Items": [{
        "GTIN": "Item 1",
        "Name": "Smokes",
        "Quantity": 3.0,
        "UnitPrice": 11.0,
        "Discount": 0.0,
        "Labels": ["A"],
        "TotalAmount": 30.0
    }, {
        "GTIN": "Item 2",
        "Name": "Smokes",
        "Quantity": 3.0,
        "UnitPrice": 0.0,
        "Discount": 0.0,
        "Labels": ["A"],
        "TotalAmount": 30.0
    }],
    "Hash": "W33lEEgkSRsqTFMO86a8Og=="
}

Благодарен за любую помощь по этому вопросу.Благодарю.Кроме того, из-за ограничений дизайна решения я должен использовать это, а не что-либо еще.

1 Ответ

3 голосов
/ 16 апреля 2019

В вашем строковом литерале вы называете переменную DateAndTimeOfIssue, но DataAndTimeOfIssue в объекте.Это может привести к ошибке.Кроме того, тип переменной IT изменяется со строки на целое число.Это не должно быть проблемой, потому что int может быть приведен к строке, но я бы посоветовал вам использовать тот же тип.

Поддерживает ли веб-служба переменные GTIN и Discount вмассив Items?

...