【发布时间】:2012-01-11 04:07:55
【问题描述】:
我的客户端有 10 个表,它需要通过内部 WCF 加载到服务器。由于所有这些都是内部的,我可以使用我想要的任何技术编写客户端和服务器。
在客户端,我想使用 LINQ 将数据从表加载到 List、List 等...
在服务器上,我认为有一个 [DataContract] 如下:
[DataContract]
[KnownType(typeof(Table1))]
[KnownType(typeof(Table2))]
[KnownType(typeof(Table3))]
public class GenericType<T>
{
[DataMember]
public List<T> Data { get; set; }
}
然后在客户端添加代表匹配表的类。
[DataContract]
public class Table1
{
[DataMember]
public int UserID { get; set; }
[DataMember]
public string FullName { get; set; }
}
[DataContract]
public class Table2
{
[DataMember]
public int UserID { get; set; }
[DataMember]
public string Address1 { get; set; }
}
[DataContract]
public class Table3
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string Description { get; set; }
}
当我创建客户端引用时,我没有得到服务器上声明的所有类,而且似乎只有 [DataContract] 上指定的第一个 [KnownType] 对客户端可见。
我的印象是 Generics 意味着允许多种类型,但 我认为 WCF 只能处理一个 [KnownType] x 类 是否正确?
如果是这样,我编写此代码的唯一方法是复制并粘贴 GenericType 类的 10 次,并在每次复制时更改 [KnownType] ??
因为如果这是唯一的解决方案,那么使用 Generic 而不是直接定义的 List,List 作为我的参数的真正好处是什么??
任何想法都会帮助我理清思路
出现问题是因为除非其中一个 WCF 方法使用任何声明为 [DataContract] 的 CLASSES ...似乎 WCF 不会将这些类带到客户端。
这是预期的情况吗?
【问题讨论】:
-
“我遇到了一个错误”。确切的错误是什么?另外KnownTypes“Table1”、“Table2”等也需要用[DataContract]和[DataMember]标记。
-
我认为你错了,你可以在 msdn 上查看:msdn.microsoft.com/en-us/library/ms730167.aspx
-
@Erniel 即使我将 [DataContract] 和 [DataMember] 放在了客户端上,我仍然只能获得 Table1。
-
@PranayRana 我阅读了那个链接,但我仍然只得到第一个声明的类型,而不是其他类型......