首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“NetDataContractSerializer不支持.类型的使用”--为什么使用NetDataContractSerializer?

“NetDataContractSerializer不支持.类型的使用”--为什么使用NetDataContractSerializer?
EN

Stack Overflow用户
提问于 2015-01-08 16:32:41
回答 1查看 654关注 0票数 2

导致此错误是因为正在使用NetDataContractSerializer (NetDCS),但引用程序集没有共享并包含在客户端中。这个问题与此无关。

这个问题是关于防止NetDataContractSerializer被使用,或者至少找出客户端使用它的原因。

  • 为什么客户端使用NetDCS时,我还没有配置它这样做呢? 根据文章/帖子,我找到了这个is an explicit step;我还没有为项目或WCF客户端手动启用此功能--是否有超过我的机器/框架覆盖?

  • 我可以强制客户端使用正常的DataContractSerializer (DCS)吗? 如果是这样的话,我可以在每种类型或名称空间的基础上强制这样做吗?泛型框架“基本类型”已经存在于引用的程序集中;理想情况下,我可以使用NetDCS来解决这些问题--但是为了“解决”这个问题,我会放弃NetDCS。 如果没有,是否有任何更激烈的措施可用,如咀嚼响应/响应XML? (我可以手动添加任何所需的合同解析器,并处理损坏的生成名称。)

使用WCF测试客户端(它总是使用DCS?)“工作得很好”,这让我相信当前的问题与使用来自项目的服务时发生的NetDCS反序列化有关。我可能误解了WCF测试客户端的工作方式。

下面是错误消息(可以通过添加NetDCS的引用程序集来解决,但我不想这样做),以确保我没有误解这个问题。我95%肯定这是在反序列化的客户端。

格式化程序在试图反序列化消息时抛出一个异常。 “类型的使用”因为NetDataContractSerializer.不支持get-only集合。考虑用CollectionDataContractAttribute属性或SerializableAttribute属性标记类型,或者向属性添加一个setter。

以及堆栈摘要:

代码语言:javascript
复制
Server stack trace: 
   at System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(Message reply, MessageFault fault, String action, MessageVersion version, FaultConverter faultConverter)
   at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ref ProxyRpc rpc)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService

WCF客户端配置是“简单”默认配置,没有在运行时修改行为的代码。

代码语言:javascript
复制
<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_myServiceBinding" />
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="endPoint.svc"
          binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_myServiceBinding"
          contract="MyServive.IMyServiceEndPoint" name="BasicHttpBinding_serviceEndPoint" />
    </client>
  </system.serviceModel>

服务引用是在VS 2013中生成的,项目目标是.NET 4。带有服务引用的项目和测试项目都是简单的类库--即。它们不在IIS中托管。

EN

回答 1

Stack Overflow用户

发布于 2015-01-08 17:33:38

可以应用XmlSerializerFormatAttribute (http://msdn.microsoft.com/en-us/library/system.servicemodel.xmlserializerformatattribute.aspx)强制类使用XML序列化程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27845011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档