我有一个返回BaseModel
的服务方法,它有许多派生类。我希望我的服务能够获取所请求的项目,即解析为DerivedClass1 : BaseModel
并返回它。当然,我的服务的返回类型是BaseModel
。
在这种情况下,我必须将我的BaseModel定义DerivedClass1
添加为KnownType
[KnownType(typeof(DerivedClass1))]
[DataContract]
public class BaseModel {
...
派生类的列表正在改变,我不想总是更新它,所以我找到了一个解决方案,我可以这样做:
[KnownType("DerivedTypes")]
[Serializable]
public class BaseModel {
...
private static Type[] DerivedTypes() {
return (from t in Assembly.GetExecutingAssembly().GetTypes() where t.IsSubclassOf(typeof(BaseModel)) select t).ToArray();
}
...
所以现在每个派生类都列为KnownType
。大!
现在我也需要相同的XmlInclude
。我正在使用
[System.Xml.Serialization.XmlInclude(typeof(DerivedClass1))]
注释。有没有办法做类似的事情?有一个更好的方法吗?可以这样做吗
[System.Xml.Serialization.XmlInclude("DerivedTypes")]
谢谢!
答案 0 :(得分:0)
如果您使用XmlSerializer
,则可以将类型列表传递给其构造函数。
var serializer = new XmlSerializer(typeof(BaseModel), BaseModel.DerivedTypes());