gpt4 book ai didi

c# - WCF 使用 ServiceKnownType 返回接口(interface)类型

转载 作者:行者123 更新时间:2023-11-30 17:48:39 24 4
gpt4 key购买 nike

我正在实现以下 WCF 服务

    [ServiceContract]
[ServiceKnownType(typeof(Person))]
public interface IPersonService
{
[OperationContract]
IPerson GetPerson();
}
[AspNetCompatibilityRequirements(RequirementsMode =AspNetCompatibilityRequirementsMode.Allowed)]
public class PersonService : IPersonService
{
public IPerson GetPerson()
{
return new Person();
}
}

定义接口(interface)IPerson

public interface IPerson
{
string FirstName { get; set; }
string LastName { get; set; }
}

实现接口(interface)的Person类定义为

[DataContract]
public class Person : IPerson
{
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
}

问题是当我引用 PersonService 并调用 GetPerson 方法时,我得到的结果是对象类型而不是 Person 类型。要获得类型 Person,我必须进行显式转换。

static void Main(string[] args)
{
var proxy = new PersonServiceReference.PersonServiceClient();
PersonServiceReference.Person person = (PersonServiceReference.Person)proxy.GetPerson();
}

有什么方法可以让 GetPerson Web 方法在不进行显式转换的情况下返回 IPERSON 类型?

最佳答案

您是否有不止一个实现 IPerson 接口(interface)的类?

如果您知道 GetPerson 函数的返回类型始终是 Person,为什么要有 IPerson?只需更改 IPersonService 接口(interface)上方法的接口(interface)以返回 Person 而不是 IPerson 并更新客户端中的服务引用。这将为您提供一个返回 Person 对象的 GetPerson(因此无需转换)。

另一方面,如果您将拥有多个 IPerson 类型的类(如 Employee、Customer、Person 等),并且 GetPerson 方法可以返回多个类型,则转换是你摆脱这种情况的唯一方法,因为返回的对象类型可以变形为任何实现 IPerson 的类型。

关于c# - WCF 使用 ServiceKnownType 返回接口(interface)类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22640546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com