[DataContract] public class CustomClass { [DataMember] public string Foo { get; set; } [DataMember] public int Bar { get; set; } }
然后我有一个WCF RESTful Web服务,其中包含:
[OperationContract] [WebInvoke(Method = "POST",RequestFormat = Webmessageformat.Json,ResponseFormat = Webmessageformat.Json,BodyStyle = WebMessageBodyStyle.Bare,UriTemplate = "/class/save")] bool Save(CustomClass custom);
所以在浏览器端我jsonized我的CustomClass对象它看起来像:
var myClass = "{ foo: \"hello\",bar: 2 }"; $.ajax({ contentType: "application/json",data: { custom: myClass },dataType: "json",success: callback,type: "POST",url: "MyService.svc/class/save" });
我使用$.ajax提交数据w / jquery,所以我可以手动将内容类型设置为“application / json”,当它提交时,postbody看起来像
custom=<uri encoded version of myClass>
我收到以下错误:
服务器遇到处理该请求的错误.异常消息是’There
是检查MyAssembly.CustomClass类型的对象的起始元素的错误.遇到意外
角色“c”.有关详细信息,请参阅服务器日志.异常堆栈跟踪是:
在System.Runtime.Serialization.XmlObjectSerializer.IsstartObjectHandleExceptions
(XmlReaderDelegator阅读器)
在System.Runtime.Serialization.Json.DataContractJsonSerializer.IsstartObject(XmlDictionaryReader
读者)
在System.ServiceModel.dispatcher.SingleBodyParametermessageformatter.Readobject(消息消息)
在System.ServiceModel.dispatcher.SingleBodyParametermessageformatter.DeserializeRequest(消息消息
,Object []参数)
在System.ServiceModel.dispatcher.Demultiplexingdispatchmessageformatter.DeserializeRequest(Message
message,Object []参数)
在System.ServiceModel.dispatcher.UriTemplatedispatchFormatter.DeserializeRequest(消息消息
,Object []参数)
在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.ProcessMessage4(MessageRpc& rpc)
在System.ServiceModel.dispatcher.ImmutabledispatchRuntime.ProcessMessage3(MessageRpc& rpc)
在System.ServiceModel.dispatcher.ImmutabledispatchRuntime.ProcessMessage2(MessageRpc& rpc)
在System.ServiceModel.dispatcher.ImmutabledispatchRuntime.ProcessMessage1(MessageRpc& rpc)
在System.ServiceModel.dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
我已经尝试包装我的json的数据…我已经尝试使用$.post发送消息(但是没有将内容类型设置为application / json,所以webservice不明白)..任何想法?
解决方法
所以我刚刚遇到同样的错误在哪里
data:'{id: 1 }',
没有工作,但是
data:'{"id": 1 }',
做了工作
我希望这有助于别人出去