Я использую RestSharp, и у меня есть проблема, когда я десериализую Json.Как десериализовать json без знания формата?
В случае успеха, я получаю JSon подобное (данные таблицы):
{"status": "OK", "data": "[...]"}
и в случае ошибки, я получаю Json как (данные строка):
{"status": "ERROR", "data": "..."}
Как я могу узнать, нужно ли десериализовать Json таблицей или строкой?
Мой метод что-то подобное (она возвращает таблицу, но сбои, если Json возвращает строку в виде данных):
public Task<Items> GetItemById(string id)
{
var client =
new RestClient(string.Format("{0}/{1}/{2}/{3}/{4}", _baseUrl,
AppResources.RestApiVersion, userId, token, AppResources.NotUse));
var tcs = new TaskCompletionSource<Items>();
var request = new RestRequest(string.Format("/items/get/{0}", id));
client.ExecuteAsync<Items>(request, response => {
try
{
tcs.SetResult(new JsonDeserializer().Deserialize<Items>(response));
}
catch (InvalidCastException e)
{
}
});
return tcs.Task;
}
Ну, вы действительно не хотите просто десериализовать список. Чтобы десериализовать список, вам необходимо десериализовать содержимое списка, который будет представлять собой объекты со свойствами, отличными от списка. Я имею в виду, что если в основном объекте вы хотели только объекты списка, вы могли бы создать статическую «глубинную» переменную, которую вы увеличиваете в «ToString()» (она рекурсивна) и увеличивать глубину в начале «ToString()» и уменьшите его в конце и обрабатывайте только первый и второй операторы 'if' при глубине> 0. Третий, если (' else if (значение ArrayList) ') обрабатывает список. – Pete