6fo*_*der 3 c# inheritance 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<UserBase> Users {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
因为您正在使用[XmlElement]集合属性,相应的xml将类似于:
<GetUserResponse>
<Users>{this is a user}</Users>
<Users>{this is a user}</Users>
<SuperUsers>{this is a super user}</SuperUsers>
<Users>{this is a user}</Users>
<SuperUsers>{this is a super user}</SuperUsers>
</GetUserResponse>
Run Code Online (Sandbox Code Playgroud)
除了之外,没有任何地方可以为集合属性获得更好的名称Items.我想知道使用它是否更好:
[XmlArray("Users")]
[XmlArrayItem("User", typeof(User))]
[XmlArrayItem("SuperUser", typeof(SuperUser))]
Run Code Online (Sandbox Code Playgroud)
为了建立:
<GetUserResponse>
<Users>
<User>{this is a user}</User>
<User>{this is a user}</User>
<SuperUser>{this is a super user}</SuperUser>
<User>{this is a user}</User>
<SuperUser>{this is a super user}</SuperUser>
</Users>
</GetUserResponse>
Run Code Online (Sandbox Code Playgroud)
那么你会有一个Users属性.