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
属性。