将xml文件反序列化为对象

时间:2018-09-11 18:07:38

标签: c#

我正在创建的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()对象中的对象时,出现“文件名未找到”错误。我猜测模拟没有流入我尝试加载的对象中。

如果我尝试以模拟方式加载文本阅读器,则可以看到该文件。所以我知道该文件存在并且可以被程序看到。

任何人都知道发生了什么事吗?

1 个答案:

答案 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);
}

我仍然对为什么模拟似乎没有继承到模拟中创建的对象感到困惑?但是我现在没有时间处理这个问题...