【发布时间】:2016-06-15 17:13:30
【问题描述】:
我已经阅读了多个线程,并且能够利用 C# 中的序列化方法反序列化 XML。我遇到的问题是我提供的 XML 不像我以前见过的那样。而不是拥有一个包含项目列表的对象,我得到一个包含多个属性的项目的对象。这就是我所拥有的。这是 XML:
<DATA>
<OBJECT TYPE="Sheet consumption">
<ITEM>
<PROPERTY NAME="Sheet">GN18 48x120</PROPERTY>
<PROPERTY NAME="Sheet used area">31.556835306782627</PROPERTY>
<PROPERTY NAME="Made quantity">2</PROPERTY>
<PROPERTY NAME="Required quantity">2</PROPERTY>
<PROPERTY NAME="Sheet weight">34.132561</PROPERTY>
<PROPERTY NAME="Sheet width">1219.2</PROPERTY>
<PROPERTY NAME="Sheet length">3048</PROPERTY>
<PROPERTY NAME="Sheet thickness">1.1684</PROPERTY>
<PROPERTY NAME="Real time">0.712</PROPERTY>
<PROPERTY NAME="Production order">139020</PROPERTY>
<PROPERTY NAME="Item">W220-09528</PROPERTY>
<PROPERTY NAME="Quantity/Sheet">55</PROPERTY>
</ITEM>
<ITEM>
<PROPERTY NAME="Sheet">GN20 48x120</PROPERTY>
<PROPERTY NAME="Sheet used area">35.895446716901191</PROPERTY>
<PROPERTY NAME="Made quantity">14</PROPERTY>
<PROPERTY NAME="Required quantity">14</PROPERTY>
<PROPERTY NAME="Sheet weight">26.618381</PROPERTY>
<PROPERTY NAME="Sheet width">1219.2</PROPERTY>
<PROPERTY NAME="Sheet length">3048</PROPERTY>
<PROPERTY NAME="Sheet thickness">0.9144</PROPERTY>
<PROPERTY NAME="Real time">0.414</PROPERTY>
<PROPERTY NAME="Production order">139019</PROPERTY>
<PROPERTY NAME="Item">W220-09533-C</PROPERTY>
<PROPERTY NAME="Quantity/Sheet">7</PROPERTY>
</ITEM>
</OBJECT>
</DATA>
这就是类反序列化的样子
使用 System.Collections.Generic; 使用 System.Xml.Serialization;
//
// This source code was auto-generated by xsd, Version=4.0.30319.33440.
//
namespace WindowsFormsApplication1
{
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class DATA
{
private DATAOBJECT itemsField;
/// <remarks/>
[System.Xml.Serialization.XmlElement("OBJECT")]
public DATAOBJECT Items
{
get
{
return this.itemsField;
}
set
{
this.itemsField = value;
}
}
}
/// <remarks/>
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class DATAOBJECT
{
private List<DATAOBJECTITEMPROPERTY> iTEMField;
private string tYPEField;
/// <remarks/>
[System.Xml.Serialization.XmlArrayAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlArrayItem("PROPERTY", typeof(DATAOBJECTITEMPROPERTY), Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
public List<DATAOBJECTITEMPROPERTY> ITEM
{
get
{
return this.iTEMField;
}
set
{
this.iTEMField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string TYPE
{
get
{
return this.tYPEField;
}
set
{
this.tYPEField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class DATAOBJECTITEMPROPERTY
{
private string nAMEField;
private string valueField;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string NAME
{
get
{
return this.nAMEField;
}
set
{
this.nAMEField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlTextAttribute()]
public string Value
{
get
{
return this.valueField;
}
set
{
this.valueField = value;
}
}
}
}
当我反序列化时,我期望的结果是有 2 个 DATAOBJECTITEMPROPERTY 类型的对象,但我得到了 24 个 DATAOBJECTITEMPROPERTY 类型的对象,其中基本上是每个属性名称。
我不明白我做错了什么。
【问题讨论】:
标签: c# xml deserialization xml-deserialization