.net WCF无法获取json
我在将json导入WCF REST服务时遇到问题.net WCF无法获取json,.net,wcf,rest,.net,Wcf,Rest,我在将json导入WCF REST服务时遇到问题 <ServiceContract()> Public Interface IMyService <OperationContract()> <WebInvoke(Method:="POST", RequestFormat:=WebMessageFormat.Json, ResponseFormat:=WebMessageFormat.Json, UriTemplate:="n
<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>
...
公共接口IMyService
子通知(消息为字符串)
端接口
...
...
...
当我使用有效负载发送到我的服务时:
{
“Id”:“123456789”,
“代码”:“1”,
“ExId”:“123456789”,
“头衔”:“头衔”,
“消息”:“示例消息”
}
我得到下面的错误
服务器在处理请求时遇到错误。例外
消息为“反序列化类型的对象时出错”
System.String。应为命名空间“”中的结束元素“root”。建立
命名空间“”中的元素“Id”。有关详细信息,请参阅服务器日志。
异常堆栈跟踪为:
在
System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator
读取器,布尔verifyObjectName,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(布尔值
等操作上下文集)
编辑:
理想情况下,我希望使用OperationContext.Current.RequestContext.RequestMessage从请求体获取原始json,但似乎我只能获取xml。当我使用JsonConvert.SerializeXmlNode(doc)时,我得到的是json,但不是我期望的原始json。可以用作参数
示例:
WCF服务接口:
<ServiceContract()>
Public Interface IService1
<OperationContract()>
Sub NotifyStream(jsonStream As Stream)
End Interface
WCF客户端:
Dim client = New Service1Client
Dim jsonString = "{ 'Id' : '123456789', 'Code' : '1', 'ExId' : '123456789', 'title' : 'Title', 'message' : 'Sample Message' }"
Dim stream = New MemoryStream(Encoding.UTF8.GetBytes(jsonString))
client.NotifyStream(stream)
文档:
- MSDN文章:
Dim client = New Service1Client
Dim jsonString = "{ 'Id' : '123456789', 'Code' : '1', 'ExId' : '123456789', 'title' : 'Title', 'message' : 'Sample Message' }"
Dim stream = New MemoryStream(Encoding.UTF8.GetBytes(jsonString))
client.NotifyStream(stream)