【发布时间】:2015-04-03 03:29:46
【问题描述】:
我在将 json 导入我的 WCF REST 服务时遇到问题。
<ServiceContract()>
Public Interface IMyService
<OperationContract()>
<WebInvoke(Method:="POST",
RequestFormat:=WebMessageFormat.Json,
ResponseFormat:=WebMessageFormat.Json,
UriTemplate:="notify",
BodyStyle:=WebMessageBodyStyle.Bare)>
Sub Notify(message As String)
End Interface
...
<service name="MyService" behaviorConfiguration="ServiceBehavior">
<endpoint binding="webHttpBinding" behaviorConfiguration="webHttp" bindingConfiguration="webBinding" contract="IMyService" />
</service>
...
<endpointBehaviors>
<behavior name="webHttp">
<webHttp />
</behavior>
</endpointBehaviors>
...
当我在http://localhost:64574/MyService.svc/notify 使用有效负载发布到我的服务时:
{ “身份证”:“123456789”, “代码”:“1”, “ExId”:“123456789”, “标题”:“标题”, “消息”:“示例消息” }
我收到以下错误。
服务器在处理请求时遇到错误。例外 消息是'反序列化类型对象时出错 系统字符串。应来自命名空间“”的结束元素“根”。成立 命名空间 ''.' 中的元素 'Id'。有关更多详细信息,请参阅服务器日志。 异常堆栈跟踪是:
在 System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator 阅读器,布尔验证对象名称,DataContractResolver dataContractResolver) 在 System.Runtime.Serialization.Json.DataContractJsonSerializer.ReadObject(XmlDictionaryReader 阅读器,布尔验证对象名称)在 System.ServiceModel.Dispatcher.SingleBodyParameterMessageFormatter.ReadObject(消息 消息)在 System.ServiceModel.Dispatcher.SingleBodyParameterDataContractMessageFormatter.ReadObject(消息 消息)在 System.ServiceModel.Dispatcher.SingleBodyParameterMessageFormatter.DeserializeRequest(消息 消息,对象 [] 参数)在 System.ServiceModel.Dispatcher.DemultiplexingDispatchMessageFormatter.DeserializeRequest(消息 消息,对象 [] 参数)在 System.ServiceModel.Dispatcher.UriTemplateDispatchFormatter.DeserializeRequest(消息 消息,对象 [] 参数)在 System.ServiceModel.Dispatcher.CompositeDispatchFormatter.DeserializeRequest(消息 消息,对象 [] 参数)在 System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc& RPC)在 System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& RPC)在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& RPC)在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& RPC)在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& RPC)在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& RPC)在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& RPC)在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& RPC)在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& RPC)在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
编辑: 理想情况下,我想使用 OperationContext.Current.RequestContext.RequestMessage 从请求正文中获取原始 json,但似乎我只能获取 xml。当我使用 JsonConvert.SerializeXmlNode(doc) 我得到 json 但不是我期望的原始 json。
【问题讨论】:
-
你试过 BodyStyle WebMessageBodyStyle.Wrapped 吗?
-
对不起,我的意思是 WebMessageBodyStyle.WrappedRequest
-
是的,我试过了。 WebMessageBodyStyle.WrappedRequest 或 WebMessageBodyStyle.Wrapped 返回“示例消息”。我需要整个 json 对象。