2017-01-26 4 views
0

Я борюсь, чтобы найти способ вернуть сложные данные в мое клиентское приложение с сервера 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 }); 
    } 
+0

Ошибка говорит, что проверка на круговые Справка. Имеются ли свойства PropertyDataType или PropertyDataTypeModel свойства, указывающие друг на друга? – Botonomous

+0

http: // stackoverflow.com/a/8711702/5062791 – ColinM

+0

@Botonomous Да, они имеют одинаковые свойства, один используется как ViewModel (PropertyDataTypeModel) и (PropertyDataType), который основан на структуре базы данных. Преобразование происходит хорошо. – Rossco

ответ

1

сообщение об ошибке указывает, что данные содержат циклическую ссылку, которая не может быть сериализованы.

Вы можете настроить поведение на круговых ссылках с чем-то вроде этого:

System.Web.Http.GlobalConfiguration.Configure(config => 
{ 
    config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; 
}); 

Вы можете найти дополнительную информацию о эталонной цикле обработки здесь:

+0

Спасибо. Это сработало! – Rossco

Смежные вопросы