[英]Null part in deserialize xml to class object
我必须反序列化一些xml到使用xsd.exe从xsd文件生成的对象类。 一切都很好,但对象中的一部分始终为空,我也不知道为什么,因为在xml中它具有数据。
这是xml文件:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<jdf:root xmlns:jdf="http://www.tmp.com/jdf" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<jdf:header>
<jdf:trace-id>string</jdf:trace-id>
<jdf:timestamp>string</jdf:timestamp>
<jdf:command>string</jdf:command>
<jdf:version>string</jdf:version>
</jdf:header>
<even:data xmlns:even="http://tmp.com/zzz/pivot/event">
<even:event xmlns:com="http://tmp.com/zzz/utils/components">
<even:eventId>3</even:eventId>
<even:distributorId>string</even:distributorId>
<even:distributionNetworkId>string</even:distributionNetworkId>
<even:typology>string</even:typology>
</even:event>
</even:data>
</jdf:root>
这是我来自xsd文件的课程:
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.tmp.com/jdf")]
[System.Xml.Serialization.XmlRootAttribute("root", Namespace = "http://www.tmp.com/jdf", IsNullable = false)]
public partial class JdfRoot
{
private JdfHeader headerField;
private object dataField;
/// <uwagi/>
public JdfHeader header
{
get
{
return this.headerField;
}
set
{
this.headerField = value;
}
}
/// <uwagi/>
public object data
{
get
{
return this.dataField;
}
set
{
this.dataField = value;
}
}
}
/// <uwagi/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://mib.bnpp.com/cle/pivot/event")]
[System.Xml.Serialization.XmlRootAttribute("data", Namespace = "http://tmp.com/cle/pivot/event", IsNullable = false)]
public partial class T_data
{
private EventOut eventField;
/// <uwagi/>
public EventOut @event
{
get
{
return this.eventField;
}
set
{
this.eventField = value;
}
}
}
我只剩下了最必要的部分,因为完整版非常长。
您需要通过应用XmlElementAttribute
正确设置data
属性的XML名称空间:
private T_data dataField;
[XmlElement("data", Namespace = "http://tmp.com/zzz/pivot/event")]
public T_data data
{
get
{
return this.dataField;
}
set
{
this.dataField = value;
}
}
同样,正如Richard Schneider所写,将data
类型更改为T_data
。 如果将其保留为object
属性,则even:data
元素树将反序列化为XmlNode []
数组,这可能不是您想要的。
(查找和修复“反序列化为null
XML属性”错误的最简单方法是在内存中创建该类的示例, 序列化为 XML,然后将输出与输入XML进行比较。通常,您会发现其中的区别;通常是不正确的名称空间。)
在JdfRoot
,将public object data
更改为public T_data data
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.