我正在创建的Windows服务中工作。代码在我的开发箱上运行良好,但是当我将代码部署到服务器时,它找不到要反序列化的xml文件。 xml文件在C:\ ProgramData \ AppName \ Filequeue
中创建在对象中,我创建了一个辅助方法:
public T Deserialize<T>(string input) where T : class
{
System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(T));
using (var reader = XmlReader.Create(input))
{
return (T)ser.Deserialize(reader);
}
}
然后我使用模拟对象创建一个对象并尝试读取文件:
using (var impersonation = new ImpersonatedUser(AdminName, Domain, ADPass))
{
oMailer = (MailQueue) oMailer.Deserialize<MailQueue>(szFileName);
}
当尝试将文件加载到Deserialize()对象中的对象时,出现“文件名未找到”错误。我猜测模拟没有流入我尝试加载的对象中。
如果我尝试以模拟方式加载文本阅读器,则可以看到该文件。所以我知道该文件存在并且可以被程序看到。
任何人都知道发生了什么事吗?
答案 0 :(得分:0)
我将文件读取器代码移至包含模拟的方法下。然后创建一个站立对象:
public class Serializer
{
public T Deserialize<T>(string input) where T : class
{
System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(T));
using (StringReader sr = new StringReader(input))
{
return (T)ser.Deserialize(sr);
}
}
public string Serialize<T>(T ObjectToSerialize)
{
XmlSerializer xmlSerializer = new XmlSerializer(ObjectToSerialize.GetType());
using (StringWriter textWriter = new StringWriter())
{
xmlSerializer.Serialize(textWriter, ObjectToSerialize);
return textWriter.ToString();
}
}
}
然后,我能够加载XML,然后通过以下方式加载和反序列化它:
using (impersonation...)
{
var reader = File.ReadAllText(szFileName);
oMailer = ser.Deserialize<MailQueue>(reader);
}
我仍然对为什么模拟似乎没有继承到模拟中创建的对象感到困惑?但是我现在没有时间处理这个问题...