C# 可以在web服务中使用对象吗?

C# 可以在web服务中使用对象吗?,c#,web-services,generics,svc,C#,Web Services,Generics,Svc,在此处输入代码我想用.asvc web服务发送动态类型。我有一个类具有一些属性。我想发送任何类型的对象,甚至是列表中的类。然后回到客户端 我的意思是我总是想使用SysResulttype。但有时使用列表,有时使用列表 像吼叫 [Serializable] public class SysResult { public int CRCResult; public long CRCTransactionId; public bo

在此处输入代码我想用.asvc web服务发送动态类型。我有一个类具有一些属性。我想发送任何类型的对象,甚至是列表中的类。然后回到客户端

我的意思是我总是想使用
SysResult
type。但有时使用
列表
,有时使用
列表

像吼叫

    [Serializable]
    public class SysResult
    {
        public int CRCResult;
        public long CRCTransactionId;
        public bool CRCStatus;
        public string CRCMessage;
        public List<Anything> ListObject;
    }
有没有办法发送动态类型?还是我想做些完全错误的事


提前谢谢。

这可能会对你手头的事情有所帮助

WCF不支持使用通用方法进行服务操作。 换句话说,只有具体类型可以用于服务 操作。无法使用打开的泛型类型。现在,这很重要 澄清这不是WCF的限制。相反,这是一个问题 WSDL的限制,用于将服务元数据公开给 消费者。WSDL中没有定义泛型的构造 类型。一般来说,我同意这种行为,因为它 减少客户端和服务之间的耦合

虽然不支持泛型方法,但可以公开 用于交换数据的通用对象。但是, 有一些限制。让我们仔细看看:


您必须返回已知类型。它不能只返回“对象”,甚至不能返回接口。如果没有datacontract,wcf如何知道在客户机上将对象序列化成什么

通常,在客户端之间传递参数和返回值时 作为一个服务,两个端点共享 要传输的数据。但是,以下情况并非如此 情况:

。。。 要传输的信息的声明类型为Object。 因为每个类型都继承自对象,并且在 如果实际发送的是哪种类型,则接收端点无法 提前确定传输数据的数据合同

您可以使用KnownTypes映射接口和对象。请看以下链接:

  [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)]
        public object[] ListObject {
            get {
                return this.ListObjectField;
            }
            set {
                if ((object.ReferenceEquals(this.ListObjectField, value) != true)) {
                    this.ListObjectField = value;
                    this.RaisePropertyChanged("ListObject");
                }
            }
        }