我试图反序列化下面的XML,但这个过程似乎没有起作用...... 这是我在反序列化XML后在PropertyGrid控件中显示值时得到的结果:
如您所见,Header
下的元素没有值。
您能帮忙检查代码有什么问题吗?
消息类:
namespace MyProject
{
[XmlRoot(ElementName="Header")]
public class Header {
[XmlElement(ElementName="Sender")]
public string Sender { get; set; }
[XmlElement(ElementName="Receiver")]
public string Receiver { get; set; }
[XmlElement(ElementName="MessageID")]
public string MessageID { get; set; }
[XmlElement(ElementName="CreationDateTime")]
public string CreationDateTime { get; set; }
[XmlAttribute(AttributeName="version")]
public string Version { get; set; }
}
[XmlRoot(ElementName="Message", Namespace="http://example.com")]
public class Message {
private Header _header = new Header();
[XmlElement(ElementName="Header")]
[TypeConverter(typeof(ConverterExpandableObject))]
public Header Header
{
get { return _header; }
set { _header = value; }
}
[XmlAttribute(AttributeName="ns", Namespace="http://www.w3.org/2000/xmlns/")]
public string Ns { get; set; }
}
}
反序列化XML的方法:
void DeserializeMessage()
{
string messageString = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Message.xml";
if (File.Exists(messageString))
{
XmlSerializer serializer = new XmlSerializer(typeof(Message));
StreamReader reader = new StreamReader(messageString);
Message m = (Message)serializer.Deserialize(reader);
reader.Close();
propertyGrid1.SelectedObject = m;
}
}
和XML本身:
<?xml version="1.0" encoding="UTF-8"?>
<ns:Message xmlns:ns="http://example.com">
<Header version="1.0">
<Sender>3015207400109</Sender>
<Receiver>8711200999903</Receiver>
<MessageID>000D2613F64AC021ED783C084735EC78E53</MessageID>
<CreationDateTime>2017-03-21T08:00:47Z</CreationDateTime>
</Header>
</ns:Message>
答案 0 :(得分:1)
更改您的课程,如下所示,它会起作用。
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://example.com")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://example.com", IsNullable = false)]
public partial class Message
{
private Header headerField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Namespace = "")]
public Header Header
{
get
{
return this.headerField;
}
set
{
this.headerField = value;
}
}
}
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class Header
{
private ulong senderField;
private ulong receiverField;
private string messageIDField;
private System.DateTime creationDateTimeField;
private decimal versionField;
/// <remarks/>
public ulong Sender
{
get
{
return this.senderField;
}
set
{
this.senderField = value;
}
}
/// <remarks/>
public ulong Receiver
{
get
{
return this.receiverField;
}
set
{
this.receiverField = value;
}
}
/// <remarks/>
public string MessageID
{
get
{
return this.messageIDField;
}
set
{
this.messageIDField = value;
}
}
/// <remarks/>
public System.DateTime CreationDateTime
{
get
{
return this.creationDateTimeField;
}
set
{
this.creationDateTimeField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public decimal version
{
get
{
return this.versionField;
}
set
{
this.versionField = value;
}
}
}
<强>输出强>