У меня сложный тип:
[DataContract]
public class CustomClass
{
[DataMember]
public string Foo { get; set; }
[DataMember]
public int Bar { get; set; }
}
Затем у меня есть веб-сервис WCF RESTful, который имеет это в нем:
[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"
});
Я отправляю данные w/jquery с помощью $.ajax, поэтому я могу вручную установить тип содержимого на "application/json", и когда он отправляется, postbody выглядит как
custom=<uri encoded version of myClass>
Я получаю следующую ошибку:
Сервер обнаружил ошибку при обработке запроса. Сообщение об исключении: "Там был элементом проверки ошибки объекта MyAssembly.CustomClass. Неожиданно символ 'c'. '. Подробнее см. Журналы сервера. Трассировка стека исключений: в System.Runtime.Serialization.XmlObjectSerializer.IsStartObjectHandleExceptions(XmlReaderDelegator reader) в System.Runtime.Serialization.Json.DataContractJsonSerializer.IsStartObject(XmlDictionaryReader читатель) в System.ServiceModel.Dispatcher.SingleBodyParameterMessageFormatter.ReadObject(сообщение сообщения) в System.ServiceModel.Dispatcher.SingleBodyParameterMessageFormatter.DeserializeRequest(сообщение сообщения , Параметры объекта []) в System.ServiceModel.Dispatcher.DemultiplexingDispatchMessageFormatter.DeserializeRequest(Сообщение message, Object []) в 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.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'ized... я попытался использовать $.post для отправки сообщения (но это не устанавливает тип содержимого для приложения /json, поэтому веб-сервис не понимает).. any идеи?