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 自己的特殊粘贴制作了一个 class:

/// <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;

但是必须有一种更简洁的方法吗?

只需将 properties/fields 声明为 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 的数组对象。