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")]

谢谢!

WCF中的XmlInclude所有派生的与Knowtypes类似的解决方案

如果使用XmlSerializer,则可以将类型列表传递给其构造函数。

var serializer = new XmlSerializer(typeof(BaseModel), BaseModel.DerivedTypes());