Как я могу использовать RestResponse для возврата списка <class>? - PullRequest
0 голосов
/ 08 ноября 2018

Во-первых, спасибо за вашу помощь - я постоянно нахожусь на сайте в поисках ответов, и они здесь больше, чем нет!

Сейчас я получаю следующую ошибку:

"Невозможно привести объект типа 'System.String' к типу 'System.Collections.Generic.IDictionary`2 [System.String, System.Object]'."

При попытке запустить следующий код:

            var clientX = new RestClient(_context.CloudUrl + ":" + _context.CloudPort.ToString());
            clientX.AddHandler("application/json", new JsonDeserializer());
            var requestX = new RestRequest("/api/web/GetAllDevicePolicies", Method.GET, DataFormat.Json);

            IRestResponse<List<DevicePolicy>> devicePolicies = clientX.Execute<List<DevicePolicy>>(requestX);

Я могу запустить команду в браузере, и я убедился, что возвращенный JSON выглядит правильно - я даже проверил его с помощью онлайн-инструмента проверки, и он предоставляет следующее:

[{
	"id": "5be3c6802a78549350d297b0",
	"policyID": 1,
	"policyName": "CloudServer",
	"policyDesc": "Controls how cloud server agents operate",
	"policyVersion": "1.0.0.0",
	"policyAuth": "Diffie-Helman",
	"deployedLocations": null,
	"alertResp": 0,
	"policyStatus": 2
}, {
	"id": "5be3c7508b829e9abc90d4a6",
	"policyID": 2,
	"policyName": "WindowsServer",
	"policyDesc": "Controls how Windows server agents operate",
	"policyVersion": "1.0.0.0",
	"policyAuth": "Diffie-Helman",
	"deployedLocations": null,
	"alertResp": 0,
	"policyStatus": 2
}, {
	"id": "5be3c7728b829e9abc90d4a7",
	"policyID": 3,
	"policyName": "LinuxServer",
	"policyDesc": "Controls how Linux server agents operate",
	"policyVersion": "1.0.0.0",
	"policyAuth": "Diffie-Helman",
	"deployedLocations": null,
	"alertResp": 1,
	"policyStatus": 2
}, {
	"id": "5be3c79b8b829e9abc90d4a8",
	"policyID": 4,
	"policyName": "IoTDevice",
	"policyDesc": "Controls how Linux server agents operate",
	"policyVersion": "1.0.0.0",
	"policyAuth": "Diffie-Helman",
	"deployedLocations": null,
	"alertResp": 2,
	"policyStatus": 2
}, {
	"id": "5be3c7b08b829e9abc90d4a9",
	"policyID": 5,
	"policyName": "Windows Laptop",
	"policyDesc": "Controls how Linux server agents operate",
	"policyVersion": "1.0.0.0",
	"policyAuth": "Diffie-Helman",
	"deployedLocations": null,
	"alertResp": 0,
	"policyStatus": 2
}, {
	"id": "5be3c7cd8b829e9abc90d4aa",
	"policyID": 6,
	"policyName": "Android Phone",
	"policyDesc": "Controls how Android Phone agents operate",
	"policyVersion": "1.0.0.0",
	"policyAuth": "Diffie-Helman",
	"deployedLocations": null,
	"alertResp": 0,
	"policyStatus": 2
}, {
	"id": "5be3c7f28b829e9abc90d4ab",
	"policyID": 7,
	"policyName": "Linux Laptop",
	"policyDesc": "Controls how Linux Laptop agents operate",
	"policyVersion": "1.0.0.0",
	"policyAuth": "Diffie-Helman",
	"deployedLocations": null,
	"alertResp": 1,
	"policyStatus": 2
}, {
	"id": "5be3c80a8b829e9abc90d4ac",
	"policyID": 8,
	"policyName": "Windows Phone",
	"policyDesc": "Controls how Windows Phone agents operate",
	"policyVersion": "1.0.0.0",
	"policyAuth": "Diffie-Helman",
	"deployedLocations": null,
	"alertResp": 1,
	"policyStatus": 2
}]

Я понятия не имею, что мне не хватает, и я действительно надеялся, что кто-нибудь сможет оказать какую-то помощь.

Спасибо!

1 Ответ

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

Так что я нашел этот ответ в другой теме - RestSharp Десериализация пустой строки в словарь Ошибка

Исходя из этого, я добавил NewtonSoft.Json, а затем этот код:

var clientX = new RestClient(_context.CloudUrl + ":" + _context.CloudPort.ToString());
            clientX.AddHandler("application/json", new JsonDeserializer());
            var requestX = new RestRequest("/api/web/GetAllDevicePolicies", Method.GET, DataFormat.Json);

            var response = clientX.Execute<DevicePolicy>(requestX);
            List<DevicePolicy> devicePolicies = JsonConvert.DeserializeObject<List<DevicePolicy>>(response.Content);

Это добилось цели!

...