2017-08-24 53 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工具,以便了解发生了什么。 –