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
的数组对象。
大家好,我 运行 在尝试反序列化 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
的数组对象。