Допустим, у меня есть простой сервис WCF:
[ServiceContract]
public interface ITestService
{
[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
object Operation();
}
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class TestService : ITestService
{
public object Operation()
{
return /*some object*/
}
}
и страница aspx, которая выполняет вызов ajax для этого сервиса и использует возвращенный объект, вот вызов ajax:
$.ajax({
type: "POST",
url: "TestService.svc/Operation",
async: false,
contentType: "application/json; charset=utf-8",
dataType: "json",
processdata: true,
success: function (msg) {
var res = msg.OperationResult;
},
error: function (xhr, msg, thrown) {
var error = xhr;
}
});
Если Operation () возвращает простой объект, такой как строка или число, то msg.OperationResult возвращает этот объект, ошибки не выдается, все работает нормально.Однако если я попытаюсь вернуть сложный объект, который имеет открытые и внутренние свойства открытых и внутренних ссылочных типов, то msg.OperationResult, переданный в случае успешного обратного вызова, не определен.Ошибка обратного вызова не возникает.Кажется, что WCF пытается сериализовать сложный объект, сталкивается с ошибкой и просто возвращает ноль, а не вызывает исключение.Вопрос - как я могу справиться с этим типом ошибок?Какой сериализатор используется WCF внутри?Это DataContractJsonSerializer?