2016-06-15 7 views
0

私は複数のスレッドを読み込んでおり、シリアル化メソッドのフォームC#を利用してXMLをデシリアライズすることができます。私が抱えている問題は、私が提供したXMLがこれまでに見たようなものではないということです。そして、アイテムのリストを含むオブジェクトを持つ代わりに、私は複数のプロパティを含む1つのアイテムを持つオブジェクトを取得します。ここに私が持っているものがあります。これはXMLです: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を使用して

をデシリアライズするためにどのように見えるかです。 using 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; 
      } 
     } 
    } 
} 

私は私が期待することをデシリアライズ結果は、タイプDATAOBJECTITEMPROPERTYの2つのオブジェクトを持つことであるが、代わりに、私は基本的には、各プロパティ名であるタイプDATAOBJECTITEMPROPERTYの24のオブジェクトを取得します。

私が間違っていることを得ることはありません。

答えて

0

あなたは複雑なことにクラスを生成するために使用していたツールを間違えず、レベルを省略しました。私はhttp://xmltocsharp.azurewebsites.net/のようなオンラインの発電機を使って私のためにクラスを生成します。

あなたの例では、はるかにクリーンで分かりやすいクラスを作成しました。

[XmlRoot(ElementName = "PROPERTY")] 
public class PROPERTY 
{ 
    [XmlAttribute(AttributeName = "NAME")] 
    public string NAME { get; set; } 
    [XmlText] 
    public string Text { get; set; } 
} 

[XmlRoot(ElementName = "ITEM")] 
public class ITEM 
{ 
    [XmlElement(ElementName = "PROPERTY")] 
    public List<PROPERTY> PROPERTY { get; set; } 
} 

[XmlRoot(ElementName = "OBJECT")] 
public class OBJECT 
{ 
    [XmlElement(ElementName = "ITEM")] 
    public List<ITEM> ITEM { get; set; } 
    [XmlAttribute(AttributeName = "TYPE")] 
    public string TYPE { get; set; } 
} 

[XmlRoot(ElementName = "DATA")] 
public class DATA 
{ 
    [XmlElement(ElementName = "OBJECT")] 
    public List<OBJECT> OBJECT { get; set; } 
} 
関連する問題