【问题标题】:XmlInclude All Derived Similarly To Knowtypes Solution in WCFXmlInclude All Derived类似于 WCF 中的 Knowtypes 解决方案
【发布时间】:2016-04-18 02:37:51
【问题描述】:

我有一个返回BaseModel 的服务方法,它有很多派生类。我希望我的服务能够获取请求的项目,即解析为 DerivedClass1 : BaseModel 并返回它。当然我的服务的返回类型是BaseModel

在这种情况下,我必须将 DerivedClass1 作为 KnownType 添加到我的 BaseModel 定义中

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

谢谢!

【问题讨论】:

    标签: c# asp.net wcf serialization


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-31
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 2012-07-29
      • 2020-11-17
      • 2011-11-03
      • 2012-08-20
      • 1970-01-01
      相关资源
      最近更新 更多