[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不明白)..任何想法?