У меня есть C# asmx webservice WP.asmx, строковый метод авторизации (строка PMSRequest)
[ScriptMethod(UseHttpGet = true)]
[WebMethod]
public string Authorisation(string PMSRequest)
который десериализует строку JSON в класс с именем Details
class Details
{
public string Number { get; set; }
}
здесь:
Details obj = JsonConvert.DeserializeObject<Details>(PMSRequest)
и в конечном итоге возвращает строку.
Я пытаюсь вызвать из браузера
https://example.net/WP.asmx/Authorisation?PMSRequest = "{\"Number\":\"5413\"}"
сильный текст но я получаю сообщение об ошибке
Could not cast or convert from System.String to My.Web.MyService.WP+Details
Newtonsoft.Json.JsonSerializationException: Error converting value
at Newtonsoft.Json.Utilities.ConvertUtils.EnsureTypeAssignable(Object value, Type initialType, Type targetType)
at Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(Object initialValue, CultureInfo culture, Type targetType)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader reader, Object value, CultureInfo culture, JsonContract contract, Type targetType)
--- End of inner exception stack trace ---
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader reader, Object value, CultureInfo culture, JsonContract contract, Type targetType)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
Он отлично работает, когда у меня есть тот же код, что и в тестовом приложении C# Windows Form
Возможно, вы добавили [ScriptMethod(UseHttpGet = true)]? Это было предназначено для исходных вызовов AJAX, где X означает XML, в частности XMLHttpRequest.
Спасибо Pano. Я добавил его (см. Отредактированный код), но получаю тот же результат :(





Вы звоните в службу МЫЛО. SOAP работает с POST и XML, а не с GET и JSON. У него есть схема, по которой клиенты могут создавать строго типизированные прокси. Вот что происходит, когда вы добавляете
Service Reference. Даже если вы попытаетесь отправить данные в формате JSON, они все равно будут упакованы в XML. Вы не получаете выгоды, но теряете все проверки типов, автоматическую сериализацию, стандартную поддержку и т. д.