Как преобразовать объект JSON, содержащий массив, в C # Dictionary <string, string>? - PullRequest
0 голосов
/ 15 ноября 2018

Я отправляю запрос в WebAPI, используя следующий код:

client.PostAsync(baseAddress + path, new FormUrlEncodedContent(JsonConvert.DeserializeObject<Dictionary<string,string>>(form)))

где client - объект класса HttpClient. Этот код выполняется для всех запросов к WebApi. Я пытаюсь отправить следующие данные в API:

{
    "code":"GUEST",
    "category":"Indian",
    "sections":["01000000-0000-0000-0000-000000000000","02000000-0000-0000-0000-000000000000"],
    "date":"0001-01-01T00:00:00",
    "time":"0001-01-01T00:00:00",
    "quantity":1.0,
    "price":0.0,
    "discount":0.0,
    "paymentMethod":"ID",
    "paymentMethodID":null,
    "ticketNo":null
}

Теперь, поскольку FormUrlEncodedContent принимает только объект Dictionary<string,string>, я преобразовываю этот JSON в этот тип, используя метод JSON.NET NewtonSoft JsonConvert.DeserializeObject. Но в точке, где начинается массив sections, он показывает мне это сообщение об ошибке: Unexpected character encountered while parsing value:[. Path 'sections'.

Итак, какой подход мне следует использовать, если я хочу использовать один и тот же код для данных JSON такого типа?

1 Ответ

0 голосов
/ 15 ноября 2018

Если вам по какой-либо причине необходимо отправить все значения в виде строк, то перед десериализацией массива строк в строку необходимо преобразовать его в Dictionary<string, string>.

Это можно сделать так:

var json = "{\"code\":\"GUEST\",\"category\":\"Indian\",\"sections\":[\"01000000-0000-0000-0000-000000000000\",\"02000000-0000-0000-0000-000000000000\"],\"date\":\"0001-01-01T00:00:00\",\"time\":\"0001-01-01T00:00:00\",\"quantity\":1.0,\"price\":0.0,\"discount\":0.0,\"paymentMethod\":\"ID\",\"paymentMethodID\":null,\"ticketNo\":null}";

var jObject = JObject.Parse(json);
jObject["sections"] = JsonConvert.SerializeObject(jObject["sections"].ToObject<string[]>());

var result = JsonConvert.DeserializeObject<Dictionary<string, string>>(jObject.ToString());

Таким образом, вы получите результат:

enter image description here

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