Я борюсь, чтобы найти способ вернуть сложные данные в мое клиентское приложение с сервера webapi. В основном возвращаемый список содержит вложенные списки другого объекта, когда я смотрю на ответ от сервера я получаю ошибки, как показано ниже:ASP.net webapi IHttpActionResult return complex JSON
Ошибка типа occurred.The «ObjectContent`1» не удалось сериализовать тело ответа для типа контента 'application/json; charset = utf-8'.System.InvalidOperationExceptionAn ошибка произошла. Собственный референтный цикл обнаружен с типом «System.Data.Entity.DynamicProxies.Property_6238A3E9AD216212102B01343C0B28238D354B83E729485520A1EC884FE53A26». Path 'свойствоDataTypes [0] .Properties [0] .PropertyDataType.Properties'.Newtonsoft.Json.JsonSerializationException в Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CheckForCircularReference (JsonWriter writer, значение Object, свойство JsonProperty, контракт JsonContract, JsonContainerContract containerContract, JsonProperty containerProperty) на Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList (jsonWriter автор, IEnumerable ценности, JsonArrayContract контракта, член JsonProperty, JsonContainerContract collectionContract, JsonProperty containerProperty) в Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize (jsonWriter jsonWriter, значение объекта, тип objectType) at Newtonsoft.Json.JsonSerializer.SerializeInternal (JsonWriter jsonWriter, значение объекта, тип objectType) в System.Net.Http.Formatting.BaseJsonMediaTy peFormatter.WriteToStream (тип типа, значение объекта, поток StreamStream, эффективное кодирование кодировки) в System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream (тип типа, значение объекта, поток writeStream, кодирование с эффективным кодированием) на System.Net.Http. Formatting.BaseJsonMediaTypeFormatter.WriteToStream (тип типа, значение объекта, поток StreamStream, контент HttpContent) в System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStreamAsync (тип типа, значение объекта, поток writeStream, контент HttpContent, TransportContext transportContext, CancellationToken cancelationToken) --- Конец трассировки стека из предыдущего места, в котором исключение было выбрано --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача задачи) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuc cessAndDebuggerNotification (Задача задачи) в System.Web.Http.WebHost.HttpControllerHandler. <WriteBufferedResponseContentAsync> d__1b.MoveNext()
Это мой код сервера отправки ответа JSON:
[Authorize]
[HttpGet]
[Route("api/propertydatatype/all")]
public IHttpActionResult GetAllPropertyDataTypes()
{
var result = propertySVC.GetDataTypes().ToList();
var config = new MapperConfiguration(cfg => {
cfg.CreateMap<PropertyDataType, PropertyDataTypeModel>();
});
IMapper mapper = config.CreateMapper();
var propertyDataTypes = mapper.Map<List<PropertyDataType>, List<PropertyDataTypeModel>>(result);
return this.Content(HttpStatusCode.OK, new { propertyDataTypes = propertyDataTypes });
}
Ошибка говорит, что проверка на круговые Справка. Имеются ли свойства PropertyDataType или PropertyDataTypeModel свойства, указывающие друг на друга? – Botonomous
http: // stackoverflow.com/a/8711702/5062791 – ColinM
@Botonomous Да, они имеют одинаковые свойства, один используется как ViewModel (PropertyDataTypeModel) и (PropertyDataType), который основан на структуре базы данных. Преобразование происходит хорошо. – Rossco