2013-03-18 41 views
0

我有如下所示的XSD:序列化對象(具有包含xsd複合類型創建的)的返回的complexType作爲元件

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Example1"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Example2" type="Example2Type" minOccurs="0" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:complexType name="Example2Type"> 
    <xs:sequence> 
     <xs:element name="Field1" type="xs:int"/> 
     <xs:element name="Field2" type="xs:int"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

使用VS2010,我已經把這個XSD成類看起來像這樣:

using System; 
    using System.Diagnostics; 
    using System.Xml.Serialization; 
    using System.Collections; 
    using System.Xml.Schema; 
    using System.ComponentModel; 
    using System.Collections.Generic; 


    public partial class Example1 
    { 

     private List<Example2Type> example2Field; 

     public Example1() 
     { 
      this.example2Field = new List<Example2Type>(); 
     } 

     public List<Example2Type> Example2 
     { 
      get 
      { 
       return this.example2Field; 
      } 
      set 
      { 
       this.example2Field = value; 
      } 
     } 
    } 

    public partial class Example2Type 
    { 

     private int field1Field; 

     private int field2Field; 

     public int Field1 
     { 
      get 
      { 
       return this.field1Field; 
      } 
      set 
      { 
       this.field1Field = value; 
      } 
     } 

     public int Field2 
     { 
      get 
      { 
       return this.field2Field; 
      } 
      set 
      { 
       this.field2Field = value; 
      } 
     } 
    } 

我現在想用上面的類創建一些對象。我使用以下代碼執行此操作:

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Example1 test = new Example1(); 
      test.Example2 = new List<Example2Type>(); 
      test.Example2.Add(new Example2Type()); 
      test.Example2[0].Field1 = 2; 

      System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(test.GetType()); 
      x.Serialize(Console.Out, test); 
      Console.ReadLine(); 

     } 
    } 
} 

現在生成的XML看起來與我所期望的不同。現在看起來是這樣的:

<Example1> 
    <Example2> 
    <Example2Type> 
     <Field1></Field1> 
     <Field2></Field2> 
    </Example2Type> 
    </Example2> 
</Example1> 

爲什麼Example2Type元素添加在這裏,我怎樣才能防止這種情況發生?

回答

0

找到了!我必須像這樣在Example1類上添加一個額外的屬性:

 [XmlElement("Example2")] 
     public List<Example2Type> Example2 
     { 
      get 
      { 
       return this.example2Field; 
      } 
      set 
      { 
       this.example2Field = value; 
      } 
     } 
相關問題