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

时间:2016-04-18 02:37:52

标签: c# asp.net wcf serialization

我有一个返回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")]

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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