XmlSerializer +多态性

给定一个(人为的)基类,以及我们想要使用XmlSerializer通过WCF序列化的子类。 我们根据文章装饰一个集合(参见响应类):

http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlelementattribute.aspx (请参阅备注部分)。

问题是虽然似乎生成了正确的WSDL,但SVCUtil生成一个类文件,其中GetUserResponse类包含名为Items的属性。 这与将[XmlElement]应用于数组有关吗? 虽然XmlArray元素没有Type属性。

提前致谢。

[Serializable] [XmlType] public class UserBase { public int Id {get;set;} } [Serializable] [XmlType] public class BasicUser : UserBase { public string UserName {get;set;} } [Serializable] [XmlType] public class SuperUser : UserBase { public string UserName {get;set;} public bool SpecialLevel {get;set;} } [Serializable] [XmlType] public class GetUserResponse { [XmlElement("Users", typeof(User)), XmlElement("SuperUsers", typeof(SuperUser))] public List Users {get;set;} } 

因为您在集合属性上使用[XmlElement] ,所以相应的xml将类似于:

  {this is a user} {this is a user} {this is a super user} {this is a user} {this is a super user}  

除了Items之外,没有任何地方可以为集合属性获得更好的名称。 我想知道使用它是否更好:

 [XmlArray("Users")] [XmlArrayItem("User", typeof(User))] [XmlArrayItem("SuperUser", typeof(SuperUser))] 

为了建立:

   {this is a user} {this is a user} {this is a super user} {this is a user} {this is a super user}   

那么你将拥有一个Users属性。