2017-08-24 49 views
0

所以我有這個類生成與xsd.exe,當我反序列化到我的對象的XML它不讀取所有的屬性。看起來像樹中的最後一個屬性沒有被讀取。XML的一些標籤沒有被反序列化

這是對象的類之一:

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] 
[System.Xml.Serialization.XmlRootAttribute(IsNullable=true)] 
public partial class relation : myXml { 

/// <remarks/> 
public object a; 

/// <remarks/> 
public object b; 

/// <remarks/> 
public object c; 

/// <remarks/> 
public object d; 

/// <remarks/> 
public object f; 

/// <remarks/> 
public object g; 

/// <remarks/> 
public object h; 

/// <remarks/> 
public object i; 

/// <remarks/> 
public object j; 
} 

示例XML:

<z id="Fo"> 
    <attributes> 
     <Relation>1<Relation> 
     <YVersion>16<YVersion> 
     <W> 
      <a>1</a> 
      <b>2</b> 
      <c>3</c> 
      <d>4</d> 
     </W> 
    </attributes> 
</z> 

當我調試,我與所有反序列化的XML對象,直到節點VV,包括節點VV的所有節點並且它是參數,但是下面的節點不是以某種方式反序列化的,在這種情況下節點A,B,C和D.

Regards,

Hugo

+0

我建議你谷歌「XML到模型C#」你會發現比XSD更好的創造者。他們在線。 – r1verside

回答

0

聽起來像W是一個複雜類型,而關係& YVersion只是整數。您需要在您的屬性對象上實現任何複雜類型的默認構造函數。此外,您想要序列化的任何其他類型都具有複雜類型作爲屬性,需要在默認構造函數中爲序列化程序實例化,以便能夠使用它們。

因此,例如,你的屬性類是這樣的:

[Serializable] 
public class Attributes 
{ 
    public int Relation {get; set;} 

public int YVersion {get; set;} 

    public MyType W {get; set;} 

    public Attributes() 
    { 
    W = new MyType(); 
    } 

} 

請記住,你不能傳遞任何參數的構造,因爲序列化不會有任何對象傳遞給它。

+0

謝謝,我會給它一個 –

+0

它不應該與一個簡單的get; set? 由於我沒有我的類型的類型,他們都被定義爲對象,我不能安置一個對象類型對象的權利 –

+0

你可以實例化一個對象。看着你的XML雖然「W」不是一個普通的對象。它有屬性名稱A,B,C,D,它們看起來是整數或者可能是字符串。此外,在您的XML關係看來是一個整數,而不是一個包含一堆子對象的對象。您可能需要備份並嘗試使用更簡單的XML而不使用xsd工具,以便了解發生了什麼。 –