WCF中的XmlInclude所有派生的与Knowtypes类似的解决方案
本文关键字:Knowtypes 解决方案 派生 中的 XmlInclude WCF | 更新日期: 2024-09-23 13:51:35
我有一个返回BaseModel
的服务方法,它有许多派生类。我希望我的服务能够获得请求的项目,即解析为DerivedClass1 : BaseModel
并返回它。当然,我的服务的返回类型将是BaseModel
。
在这种情况下,我不得不将DerivedClass1
添加到我的BaseModel定义中作为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")]
谢谢!
如果使用XmlSerializer
,则可以将类型列表传递给其构造函数。
var serializer = new XmlSerializer(typeof(BaseModel), BaseModel.DerivedTypes());