我有XML,我正在反序列化,这是我的XML
tbody
我有这个班级
display: block;"
我正在做这个
<?xml version=\"1.0\" encoding=\"utf-16\"?>
<UserInfo xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
<UserName>First_User</UserName>
<Age>25</Age>
</UserInfo>
它给了我例外,
namespace MyProject{
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http:/MyProject.ServiceContracts/2006/11", IsNullable = false)]
[DataContract]
public class UserInfo
{
private string username;
private string age;
[DataMember]
public string UserName
{
get
{
return this.username;
}
set
{
this.username = value;
}
}
[DataMember]
public string Age
{
get
{
return this.age;
}
set
{
this.age = value;
}
}
}
}
我该如何解决这个问题呢?还有其他方法可以解决这个问题吗? 我必须在WebService中使用它
答案 0 :(得分:5)
在xml元描述符中声明命名空间:
[XmlRoot(Namespace = "http:/MyProject.ServiceContracts/2006/11", IsNullable = false)]
public class UserInfo
{
[XmlElement]
public string UserName { get; set; }
[XmlElement]
public string Age { get; set; }
}
执行此操作时,您还必须在xml中使用此命名空间:
var foo = @"<?xml version=""1.0"" encoding=""utf-16""?>
<UserInfo xmlns='http:/MyProject.ServiceContracts/2006/11'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
<UserName>First_User</UserName>
<Age>25</Age>
</UserInfo>";
var xmlSerSale = new XmlSerializer(typeof(UserInfo));
using (var stringReader = new StringReader(foo))
{
var info = (UserInfo)xmlSerSale.Deserialize(stringReader);
}
另请注意,[DataContract]
会忽略[DataMember]
XmlSerializer
个属性。
更新:如果您无法更改xml,则必须从XmlRoot
属性中删除命名空间描述符。即:
[XmlRoot(IsNullable = false)]
public class UserInfo
{
[XmlElement]
public string UserName { get; set; }
[XmlElement]
public string Age { get; set; }
}
答案 1 :(得分:0)
该节点名为UserInformation
,而该类名为UserInfo
。您可以重命名该类,也可以使用合适的属性来配置其序列化名称。您可以查看this tutorial以获取有关使用属性控制序列化的更多详细信息。
答案 2 :(得分:0)
检查this answer 对于你的课程,它将是:
[XmlRoot("Userinfo")]
public class UserInfo
{
[XmlElement("UserName")]
public string Username { get; set; }
[XmlElement("Age")]
public string Age { get; set; }
}
和
UserInfo info;
XmlSerializer serializer = new XmlSerializer(typeof(UserInfo));
StreamReader reader = new StreamReader(filePath);
info = (UserInfo)serializer.Deserialize(reader);
reader.Close();