C# 如何通过API(WCF).NET发送派生类型列表

C# 如何通过API(WCF).NET发送派生类型列表,c#,wcf,C#,Wcf,我有一个服务方法,它返回一个列表,但有时我可能会在列表中发送一个DerivedClass:BaseClass 问题是我想通过电子邮件发送信息。到目前为止,我已经: [DataContract] public class BaseClass { string Data { get; set; } } 及 但是,当客户端接收到数据时,它都是作为一个类型基类的,下面应该可以解决您的问题: [DataContract] [KnownType(typeof(DerivedClass))] pub

我有一个服务方法,它返回一个
列表
,但有时我可能会在列表中发送一个
DerivedClass:BaseClass

问题是我想通过电子邮件发送信息。到目前为止,我已经:

[DataContract]
public class BaseClass {
    string Data { get; set; }
}


但是,当客户端接收到数据时,它都是作为一个类型
基类

的,下面应该可以解决您的问题:

[DataContract]
[KnownType(typeof(DerivedClass))]
public class BaseClass {
    string Data { get; set; }
}

public class DerivedClass : BaseClass
{
}

您应该将
KnownType
属性添加到
BaseClass
中,并更改
DerivedClass的
Name
,或将其删除:

[DataContract]
[KnownType(typeof(DerivedClass))]
public class BaseClass 
{
    string Data { get; set; }
}

[DataContract(Name="DerivedType")]
public class DerivedClass : BaseClass 
{
    string MoreData { get; set; }
}

您使用的是DataContract序列化还是XmlSerialization?显示您的类型定义。只要您的协定定义正确且序列化程序知道,派生类型就可以处理。@loopedcode更新了问题,很抱歉,我已设法解决了异常,但缺少数据。尝试向基类添加属性:
[KnownType(typeof(DerivedClass))]
@Roma并从派生?@captainjamie中删除(Name=“BaseClass”),设置另一个名称:
“DerivedType”
或其他名称。我刚刚删除了(name=“DerivedType”),一切正常。谢谢你的帮助!
[DataContract]
[KnownType(typeof(DerivedClass))]
public class BaseClass 
{
    string Data { get; set; }
}

[DataContract(Name="DerivedType")]
public class DerivedClass : BaseClass 
{
    string MoreData { get; set; }
}