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

Fug*_*ugu 4 c# wcf

所以,假设我有这样的事情:

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

[DataContract]
public class someClass{}

[DataContract]
public class someSubClass : someClass {}
Run Code Online (Sandbox Code Playgroud)

someClass是公开的,可以在客户端中实例化,但someSubClass永远不会被实例化,并且由于某种原因不会公开.暴露它的唯一方法似乎是将param的类型更改为someSubClass.这是荒唐的.我该怎么做呢?我不想要一个基于字符串或其他东西返回实例的方法,我希望客户端和开发人员完全了解他们可以实例化哪些类.

Joh*_*ers 8

你没有暴露这些类中的任何一个.您的客户从不实例化它们(除非您分享类型,这是一个不同的故事).

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

如果希望公开子类的元数据,则需要将该[KnownType]属性添加到每个子类的操作中:

[DataContract]
[KnownType(typeof(someSubClass))]
public class someClass{}
Run Code Online (Sandbox Code Playgroud)

请参阅已知类型.

  • @marc:我相信这就够了.我敢打赌,如果我错了,有人会尝试并在这里回复. (2认同)