簡體   English   中英

C#從XML反序列化對象獲取數據

[英]c# getting data from xml deserialized object

嗨,我在嘗試反序列化xml文件時遇到了一個小問題,

xml文件的內容為:

<?xml version="1.0" encoding="utf-8" ?>
<Settings>
  <username>test</username>
  <password>test2</password>
</Settings>

而且我已經使用Visual Studio自己的特殊粘貼來制作一個這樣的類:

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class Settings {

    private object usernameField;

    private object passwordField;

    /// <remarks/>
    public object username {
        get {
            return this.usernameField;
        }
        set {
            this.usernameField = value;
        }
    }

    /// <remarks/>
    public object password {
        get {
            return this.passwordField;
        }
        set {
            this.passwordField = value;
        }
    }
}

但是現在當我嘗試使用以下方法獲取數據時:

s.password.ToString();

我得到的結果是:

System.Xml.XmlNode[]

而不是通緝:測試

我實際上如何使用:

public object username {
        get {
            return this.usernameField;
        }
        set {
            this.usernameField = value;
        }
    }

得到我認為是放在里面的字符串返回。

編輯!!!!

我實際上是通過使用以下方法得出的:

XmlNode[] username = (XmlNode[]) s.username;
textBox1.Text = username[0].InnerText;
XmlNode[] password = (XmlNode[])s.password;
textBox2.Text = password[0].InnerText;

但是必須有一種更清潔的方法嗎?

只需將屬性/字段聲明為string而不是object

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class Settings {
    private string usernameField;

    private string passwordField;

    /// <remarks/>
    public string username
    {
        get
        {
            return this.usernameField;
        }
        set
        {
            this.usernameField = value;
        }
    }

    /// <remarks/>
    public string password
    {
        get
        {
            return this.passwordField;
        }
        set
        {
            this.passwordField = value;
        }
    }
}

.NET序列化不知道在將成員聲明為object時應該期望什么樣的數據類型,因此它適用於反序列化的最通用選項,即XmlNode對象的數組。

暫無
暫無

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

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