Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使DataContract类的子类出现在WCF服务的元数据中?_C#_Wcf - Fatal编程技术网

C# 如何使DataContract类的子类出现在WCF服务的元数据中?

C# 如何使DataContract类的子类出现在WCF服务的元数据中?,c#,wcf,C#,Wcf,假设我有这样的东西: public class Service : IService { public someExposedMethod (someClass param){ //do some stuff } } [DataContract] public class someClass{} [DataContract] public class someSubClass : someClass {} someClass是公开的,可以在客户端内实例化,但是som

假设我有这样的东西:

public class Service : IService
{
    public someExposedMethod (someClass param){
    //do some stuff
    }
}

[DataContract]
public class someClass{}

[DataContract]
public class someSubClass : someClass {}

someClass是公开的,可以在客户端内实例化,但是someSubClass永远不能实例化,并且由于某种原因不会公开。公开它的唯一方法似乎是将param的类型更改为someSubClass。这太荒谬了。我该怎么做?我不希望使用基于字符串或其他内容返回实例的方法,我希望客户机和开发人员完全了解他们可以实例化哪些类。

您不会公开这些类中的任何一个。您的客户机从不实例化它们(除非您共享类型,这是另一回事)

您正在公开元数据。当执行“添加服务引用”时,它使用该元数据创建一个看起来像服务器端类的客户端类。它看起来很像,可以序列化和反序列化表示服务器端类的XML

如果要公开子类的元数据,则需要为每个子类的操作添加
[KnownType]
属性:

[DataContract]
[KnownType(typeof(someSubClass))]
public class someClass{}

看。

我不能接受这一点,整个事情都依赖于能够完成这个最简单的简单任务!一旦涉及到网络,这种“最简单的事情”就不那么简单了。啊,好吧-那么添加从未实例化过的子类作为
KnownType
就足以让它包含在元数据中了?很好的提示-谢谢@马克:我相信这已经足够了。我打赌,如果我错了,一定会有人尝试并在这里回复。而且它很有效!!!非常感谢约翰·桑德斯,我想你今天已经帮了我两次了:)