哪些C#数据类型不是WCF可序列化的?

时间:2010-08-04 14:20:32

标签: c# sql-server wcf

我们有C#实体类,它们映射到我们的一些SQL Server数据库表。我们需要能够序列化这些类,以便通过WCF将它们从服务器发送回客户端。对于每个SQL Server数据类型,我们在关联实体中具有相应的C#CLR数据类型。

我们有一些SQL Server数据类型,例如我们需要映射到C#CLR数据类型的Image和VarBinary,因此我们可以将数据传递回客户端。问题是我不确定要为这些Image和VarBinary SQL类型使用什么CLR数据类型,以便我们可以通过WCF对它们进行序列化。

感谢。

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

除非你使用二进制传输,否则我认为WCF是发送二进制文件的极差选择,因为SOAP和JSON在处理它时都很糟糕。例如,您可以传递byte []数组,但这将非常冗长(特别是在SOAP中)。

将数据BASE64转换为字符串并将其发送过来可能更好。

答案 2 :(得分:1)

我认为米奇在他的回答中包含的链接肯定有帮助。另一件可以帮助您确定要使用的CLR类型将是您要使用的绑定类型?如果您使用NetXXX绑定(例如NetTcpBinding),则假设客户端将是.NET客户端,并且消息编码已针对此进行了优化。对于这些类型而不是base64字符串,最好使用字节数组。如果你想要互操作性(并使用WebHttpBinding或WSHttpBinding,或其他一些可互操作的绑定),那么也许base64字符串是更好的方法(正如Kirk建议的那样)。它不会针对速度/大小进行优化,但您不依赖于.NET在客户端上。

希望这有帮助!