c# - 为什么我的对象不需要 ServiceKnownType?

标签 c# .net wcf known-types

据我了解,WCF ServiceContract 中使用的每种类型(除了一些原语,如 int 和 string)都需要使用 ServiceKnownType 属性进行声明。但是,我已经构建了一个自定义对象,它可以毫无问题地通过我的 WCF 服务传输——即使我没有为它添加 ServiceKnownType。有人能解释一下为什么这样吗?

[ServiceContract(CallbackContract = typeof(IMyServiceCallback))]
public interface IMyService
{
    [OperationContract]
    List<MyObject> LoadMyObjects();
}

[DataContract]
public class MyObject
{
    [DataMember]
    private int batchID;
    [DataMember]
    private int fileID;
    [DataMember]
    private string fileName;
    [DataMember]
    private DateTime importStartTime;
// ...
}

最佳答案

不,这是不正确的。 ServiceKnownType(或数据协定上的 KnownTypeAttribute)仅在服务使用但未在操作定义中指定的类型中需要。在您的情况下,您已经定义了使用 MyObject 类的 LoadMyObjects 操作。因为该操作直接使用 MyObject,所以您不必将 MyObject 添加为 ServicKnownType。但是,如果您定义从 MyObject 派生的 MyObject2,您将无法从 LoadMyObjects 操作发送该对象,直到您将 MyObject2 声明为 ServiceKnownType。

关于c# - 为什么我的对象不需要 ServiceKnownType?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3522515/

相关文章:

c# - 如何正确解析 ConfigureServices() 中的实例?

c# - 使用枚举值作为整数

c# - 如何忽略异常

.net - 在 WPF/Silverlight ListBox 中的项目之间添加空格,第一个上方或最后一个下方没有空格

c# - 在 http//上没有监听端点可以接受 WCF 中的消息

c# - Systems.Timers.Timer 在调试中工作,但不在发布中

c# - 如何检查.NET中用CPLEX编码的模型是否是真实模型?

c# - 在对象初始值设定项中的嵌入式集合上使用集合初始值设定项时没有警告

.net - 如何使用远程服务器的 net.tcp 端点 ping 或检查 WCF 服务的状态?

wcf - 如何将值传递给 wcf 服务上的构造函数?