使用以下代码时,将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的位置传递给它即可。
答案 0 :(得分:1)
使用标准功能无法做到这一点。例如,“file://”URL不适用于RestSharp。
我建议使用RestSharp从Uri获取返回的数据并使用另一个函数将此数据反序列化为对象。
然后可以使用相同的函数从文件数据反序列化。
RestSharp是一个执行REST调用的库,而不是从任意源反序列化。即使有可能让RestSharp相信它正在与网站而不是文件交谈,但这将是一个黑客攻击。
如果您需要它,您仍然可以使用RestSharp中的XmlDeserializer
。它需要一个IRestResponse
对象,但它只使用它的Content
属性,因此它应该很容易创建。它仍然感觉像是一个黑客,并且有足够的其他XmlSerializers
那里将做得很好
答案 1 :(得分:1)
事实上,这可能是使用内置的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);