WCF和各种回报分类

本文关键字:回报 分类 WCF | 更新日期: 2023-09-27 17:59:31

我遇到了一个问题,我找不到一个好的解决方案-我有一个WCF服务,我想在那里返回一个继承自FatherClass的ChildClass对象。

通常,我会返回ChildClass,但在某些情况下,我只想返回FatherClass(它只包含1个字段"error")。

这能实现吗?

我的代码:

[WebGet(UriTemplate = "SomeQueryString", ResponseFormat = System.ServiceModel.Web.WebMessageFormat.Json)]
public ChildClass GetCollection(parameter)
{
    if (err)
    {
        return new FatherClass();
    }
    else
    {
        return new ChildClass();
    }
}

Where as ChildClass继承自FatherClass(字段较少)。

我的目标是只返回"文本"的一小部分,而不是返回整个ChildClass对象时将返回的文本。

想法?:)

谢谢!

WCF和各种回报分类

只有当您重新定义操作和约定时,这才有可能实现-您必须返回父项,并且序列化程序必须知道所有可以使用的子项,而不是父项:

[KnownType(typeof(ChildClass)]
[DataContract]
public class ParentClass 
{
    // DataMembers
}
[DataContract]
public class ChildClass : ParentClass 
{
    // DataMembers
}

你的操作看起来像:

[WebGet(UriTemplate = "SomeQueryString", ResponseFormat = System.ServiceModel.Web.WebMessageFormat.Json)]
public ParentClass GetCollection(parameter)
{
    ...
}

我认为这是一个关于C#和类型转换的问题。正如你所说,它不会起作用,因为儿童班:父亲班。见下文:

    class FatherClass
    {
        public int x { get; set; }
    }
    class ChildClass : FatherClass
    {
        public int y { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            FatherClass a = new FatherClass();
            ChildClass b = new ChildClass();

            FatherClass c = (FatherClass)b;
            ChildClass d = (ChildClass)a;
            Console.ReadLine();
        }
    }

铸造ChildClass d=(ChildClass)a;将失败。所以你可以尝试将你的签名修改为

public FatherClass GetCollection(parameter)

并使用适当类型的铸件。