Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net WCF无法获取json_.net_Wcf_Rest - Fatal编程技术网

.net WCF无法获取json

.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

我在将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>
...

公共接口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文章:

您尝试过BodyStyle WebMessageBodyStyle.WrappedRequesties吗?对不起,是指WebMessageBodyStyle.WrappedRequesties,我尝试过。WebMessageBodyStyle.WrappedRequest或WebMessageBodyStyle.Wrapped返回“示例消息”。我需要整个json对象。
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)