簡體   English   中英

無法處理來自對象的XML數據

[英]Not possible to XML data from object

我有一個非常簡單的應用程序,其中將XML文件反序列化為對象。 當我嘗試從對象中讀取值時,我得到null

我的XML文件如下所示:

 <?xml version="1.0" encoding="utf-8" ?>
    <Settings>
      <HomePage>http://www.google.dk</HomePage>
      <DefaultAudioLevel>100</DefaultAudioLevel>
    </Settings>

我的模型如下所示:

[Serializable()]
public class Settings
{   
    [XmlElement("HomePage")]
    public string Homepage { get; set; }

    [XmlElement("DefaultAudioLevel")]
    public string DefaultAudioLevel { get; set; }
}

還有SettingSerializer.cs

public class SettingSerializer
{
    private string path;
    private string EXE = Assembly.GetExecutingAssembly().GetName().Name;
    Settings settings = null;

    public SettingSerializer(string xmlPath = null)
    {
        path = new FileInfo(xmlPath ?? EXE + ".xml").FullName.ToString();
    }

    public void Deserialize()
    {
        XmlSerializer serializer = new XmlSerializer(typeof(Settings));

        StreamReader reader = new StreamReader(path);
        settings = (Settings)serializer.Deserialize(reader);
        reader.Close();
    }
}

我的測試課:

static void Main(string[] args)
{
    SettingSerializer serializer = new SettingSerializer();

    serializer.Deserialize();

    Settings settings = new Settings();

    Console.WriteLine(settings.Homepage);    

    Console.WriteLine(settings.DefaultAudioLevel);

    Console.ReadKey();
}

有人可以發現錯誤嗎?

將您的Serializer更改為此:

public class SettingSerializer
{
    private string path;
    private string EXE = Assembly.GetExecutingAssembly().GetName().Name;

    public SettingSerializer(string xmlPath = null)
    {
        path = new FileInfo(xmlPath ?? EXE + ".xml").FullName.ToString();
    }

    public Settings Deserialize()
    {
        XmlSerializer serializer = new XmlSerializer(typeof(Settings));

        StreamReader reader = new StreamReader(path);
        var settings = (Settings)serializer.Deserialize(reader);
        reader.Close();

        return settings;
    }
}

然后,在您的主要方法中,您可以執行以下操作:

static void Main(string[] args)
{
    SettingSerializer serializer = new SettingSerializer();

    Settings settings = serializer.Deserialize();

    Console.WriteLine(settings.Homepage);    

    Console.WriteLine(settings.DefaultAudioLevel);

    Console.ReadKey();
}

當你有它原來,有之間沒有連接settings正被反序列化和settings這是包含在主要方法。 您只需創建一個新對象並打印出其默認值即可,在您的情況下,默認值為null或空字符串。

暫無
暫無

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

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