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对象时将返回的文本。
想法?:)
谢谢!
只有当您重新定义操作和约定时,这才有可能实现-您必须返回父项,并且序列化程序必须知道所有可以使用的子项,而不是父项:
[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)
并使用适当类型的铸件。