Десериализация локального XML-файла с помощью Rest Sharp

У меня нет проблем с десериализацией xml в мой класс при использовании следующего кода. Мне было интересно, можно ли использовать тот же код в локальном файле, поскольку наши исходные файлы сохраняются локально для архивных целей и иногда повторно обрабатываются.

Это работает для удаленного xml, но не для локального xml:

RestRequest request = new RestRequest();
var client = new RestClient();

//doesnt work
client.BaseUrl = directory;
request.Resource = file;

//works
client.BaseUrl = baseURL;
request.Resource = url2;


IRestResponse<T> response = client.Execute<T>(request);
return response.Data;

Есть ли способ использовать RestSharp из локального файла? Я собирался попытаться использовать одну и ту же функцию независимо от того, является ли xml локальным или удаленным, и просто передать ему местоположение xml для чтения.


person wizardzz    schedule 06.12.2013    source источник


Ответы (2)


Это невозможно со стандартными функциями. Например, URL-адреса "file: //" не работают с RestSharp.

Я бы рекомендовал использовать RestSharp для получения возвращаемых данных из Uri и наличия другой функции для десериализации этих данных в объект.

Затем вы можете использовать ту же функцию для десериализации из данных файла.

RestSharp - это библиотека для выполнения вызовов REST, а не для десериализации из произвольных источников. Даже если есть возможность заставить RestSharp поверить, что он обращается к веб-сайту, а не к файлу, это будет взлом.

Если вам это нужно, вы все равно можете использовать XmlDeserializer от RestSharp. Он ожидает объект IRestResponse, но использует только свойство Content, поэтому его должно быть легко создать. Это все еще похоже на взлом, и есть более чем достаточно других XmlSerializers, которые сделают отличную работу.

person aKzenT    schedule 06.12.2013
comment
В вашем последнем предложении, я полагаю, вы имели в виду разговор с файлом, а не с веб-сайтом. Спасибо за ответ. Я бы проголосовал за, но репутации у меня пока нет. - person wizardzz; 07.12.2013
comment
Нет, я говорил, что вы можете попытаться заставить RestSharp поверить, что он обращается к веб-сайту, но на самом деле он обращается к файлу. В любом случае, если вам нравится ответ, вы должны нажать кнопку «Принять ответ». Для этого не нужна репутация. - person aKzenT; 07.12.2013
comment
Ах, спасибо, понял. Да, это показалось мне слишком хакерским, когда я подумал и попробовал это, я просто не знал. Больше всего я хотел передать эту идею кому-нибудь другому. Я просто воспользуюсь xmldeserializer. - person wizardzz; 07.12.2013

Фактически это возможно с использованием встроенного класса JsonDeserializer, как показано ниже. Я использовал этот метод, чтобы заглушить ответ API для тестирования.

// Read the file

string fileContents = string.Empty;

using (System.IO.StreamReader reader = new System.IO.StreamReader(@"C:\Path_to_File.txt"))
{
    fileContents = rd.ReadToEnd();
}

// Deserialize
RestResponse<T> restResponse = new RestResponse<T>();

restResponse.Content = fileContents;

RestSharp.Deserializers.JsonDeserializer deserializer = new RestSharp.Deserializers.JsonDeserializer();

T deserializedObject = deserializer.Deserialize<T>(restResponse);
person Varinder Singh    schedule 26.09.2014