Dla mnie był to problem z odniesieniami cyklicznymi.
Zaakceptowana odpowiedź nie zadziałała, ponieważ zmieniała tylko zachowanie programu formatującego JSON, ale otrzymywałem XML, gdy dzwoniłem do usługi z przeglądarki.
Aby to naprawić, wyłączyłem XML i wymusiłem zwracanie tylko JSON.
W pliku Global.asax umieść następujące wiersze u góry metody Application_Start:
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
GlobalConfiguration.Configuration.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);
Teraz zostaną zwrócone tylko wyniki JSON. Jeśli potrzebujesz wyników XML, musisz znaleźć inne rozwiązanie.
InnerException
właściwość wyjątku serializacji, aby dowiedzieć się, co dokładnie spowodowało niepowodzenie serializacji.