繁体   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