簡體   English   中英

將xml文件反序列化為對象

[英]Deserializing an xml file into an object

我正在創建的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()對象中的對象時,出現“文件名未找到”錯誤。 我猜測模擬沒有流入我嘗試加載的對象中。

如果我嘗試以模擬方式加載文本閱讀器,則可以看到該文件。 因此,我知道該文件存在並且可以被程序看到。

有人知道發生了什么嗎?

我將文件閱讀器代碼移至包含模擬的方法下。 然后創建一個站立對象:

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

我仍然對為什么模擬似乎不繼承到模擬中創建的對象感到困惑? 但是我現在沒有時間處理這個問題...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM