【问题标题】:Why can't WCF serialize longs or int?为什么 WCF 不能序列化 long 或 int?
【发布时间】:2009-04-09 14:18:39
【问题描述】:

我不是 100% 确定正确的术语是什么,但是..

我有一个名为 InParams 的类,它有两个字段,一个字符串和一个 long 以及它们对应的属性访问器。它们分别用 [DataContract] 和 [DataMember] 装饰。

我有一个名为 void Test(InParams inParams) 的 WCF 服务方法

使用 svcutil 生成的代理很好,我可以设置 long 字段,但是当执行服务方法时,long 字段始终为 0,即使我明确设置了 long 字段。我看了看肥皂信封,没有看到我的长字段的标签。

当我将长字段更改为字符串字段时,它会被序列化。对于整数也是如此。

我是否缺少某个属性或什么?

【问题讨论】:

  • 在您生成的代理类中是否有一个名为 NameOfYourLongFieldSpecified 的布尔属性?
  • 我遇到了与上述相同的问题。在我将 WebAPI 框架添加到现有的 ASP.NET Web 窗体应用程序之前,反序列化工作正常。 API 方法在内部调用服务层中的 WCF 方法。应用程序的其他部分调用 WCF 方法进行数据检索,并具有许多原始值类型。添加 WebAPI 框架后,反序列化失败(使用 TraceViewer 跟踪请求并且参数具有默认值 - 0)。删除了 WebAPI 框架,一切恢复正常。有人遇到过这样的问题吗?
  • @Kwan Cheng。你找到解决问题的方法了吗。似乎没有什么对我有用,我不得不使用 WCF REST 框架 (webHttpBinding) 来满足我的需求,这就像退后一步一样。

标签: wcf serialization


【解决方案1】:

你能发布一个样本吗?仔细检查:

  • 确保类具有 [DataContract()] 装饰
  • 确保 PUBLIC 属性具有 [DataMember()] 修饰

通过删除/重新生成代理类来确保它是最新的。看看会不会有什么不同?

【讨论】:

  • 是的,我要去的财产不是公开的什么的。
【解决方案2】:

如果您在客户端上除了 YourPropertyName 之外还有布尔型 YourPropertyNameSpacified 属性,则必须在客户端上将其设置为 true。我相信这适用于所有值类型的字段。另见WCF service proxy not setting "FieldSpecified" property

【讨论】:

    【解决方案3】:

    除了执行 Tanner 提到的之外,DataContractSerializer 明确支持 long 和 int。

    .NET Framework 基本类型。 .NET Framework 中内置的以下类型都可以序列化并被视为原始类型:Byte、SByte、Int16、Int32、Int64、UInt16、UInt32、UInt64、Single、Double、Boolean、Char、Decimal、Object 和字符串.Link

    【讨论】:

    • 我同意,本来打算提及已知类型的问题,但因为涉及的类型而没有提及。
    猜你喜欢
    • 2021-01-13
    • 2011-03-29
    • 2015-12-15
    • 2015-04-22
    • 2015-05-11
    • 2013-09-24
    • 2020-09-23
    • 2019-10-26
    • 1970-01-01
    相关资源
    最近更新 更多