【问题标题】:WCF REST API returned type .net applicationWCF REST API 返回类型 .net 应用程序
【发布时间】:2012-06-18 21:26:18
【问题描述】:

我有一个 API 可以返回多个我事先不知道的东西,所以我必须将返回类型设为 System.Object

我对某些类型有一些问题。就像当它返回不同的对象时它很好,但是当它返回 System.Int32 时,它不起作用并告诉我:

Cannot serialize parameter of type 'System.Int32' because it is not the exact type 'System.Object' in the method signature and is not in the known types collection.

有什么想法吗?

我知道我们可以使用 ServiceKnownType 但我想知道是否有其他方法可以做到这一点?我需要所有现有的类型(int、bool、string 等)...

【问题讨论】:

  • 您是否对值类型有问题,但对引用类型没有问题? String 是引用类型,所以这很奇怪。
  • 是值类型、int、double、long 等......当我的服务返回一个具有 int、double、long 等类型的对象时,它会犯这个错误。否则,没关系。

标签: .net wcf api rest int


【解决方案1】:

不要在服务合同上返回 System.Object 类型,即使它是 WCF 4 REST。默认序列化程序/格式化程序如何为您的合约产生响应。

您可以返回字节数组,将您的 System.Object 转换为字符串并返回。无论如何,您总是可以将您的对象序列化为 XML 或 JSON 并以字符串形式返回。

也可以链接到有相同问题的论坛,也许它可以帮助你: http://social.msdn.microsoft.com/Forums/nl-NL/wcf/thread/1f43e9b4-39a4-481b-88f0-18c7d4416745

【讨论】:

  • 我不知道为什么它适用于对象(我们创建的本地对象),但不适用于整数、双精度、字符串。这是因为我事先不知道 API 会返回什么......它可以返回一个对象、一个字符串、一个 int 等......所以这就是我将 System.Object 作为返回类型的原因。如果它是一个返回的对象,我真的不能转换成字符串吗?而且我希望使用相同的 API 来完成所有这些操作……所以我需要一种可以将所有内容都作为 System.Object 的类型,但它不适用于 int32 和其他类型。
  • 不要使用 System.Object,因为 WCF 子系统不知道如何序列化它。也许 WCF 4 REST 可以,但无论如何这是不好的做法。您可以创建自己的对象,例如名称为“详细信息”并在那里封装您需要的所有内容。然后你所有的合约都可以使用它,你就可以手动序列化它或者说 WCF 怎么做。
  • 这对我有用吗?就像在某些情况下,服务将返回 API:int 或 string(或任何类型)和其他情况下的对象。
  • 不完全理解你的意思,但是这种方法以前有效并且有效。为什么它对你不起作用?!
  • 因为我的服务可以返回每一个类型...我事先不知道...这取决于我们传入的参数,它会执行一些东西,也许会返回一个 int,也许是一个字符串,也许是一个对象(不是 System.Object),所以这就是为什么我将 System.Object 作为我的 API 返回类型,因为我事先不知道它会返回什么......而且我的解决方案中可能有 100 个不同的对象。 ...它也可能返回列表。
【解决方案2】:

您可以创建一个简单的 if 语句来检查它是否为 int,然后您可以将其转换为对象。顺便说一句,整数不能成为对象,直到它们是一个字符串,所以如果我这样做,我会做一个简单的:

blah.toString();

然后你现在可以将它用作对象了。

【讨论】:

  • 如果我要返回另一个对象?
  • 我不知道它会返回什么......我只需要一个可以接受一切的类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
  • 2023-03-10
  • 2012-06-12
  • 1970-01-01
  • 2019-03-09
相关资源
最近更新 更多