У меня есть следующие два класса в приложении С# ASP.Net для установки кода Entity Framework.
Класс объекта;
public class Facility
{
public int Id { get; set; }
public string Name {get; set; }
public ICollection<SubscriberList> SubscriberLists {get; set;}
}
Класс списка подписчиков;
Public class SubscriberList
{
public SubscriberList()
{
Facilities = new HashSet<Facility>(); //not sure if I need this.
}
public int Id { get; set; }
public int ClientId { get; set; }
public ICollection<Facility> Facilities { get; set; }
}
Со следующей конфигурацией;
public class SubscriberListConfiguration : EntityTypeConfiguration<SubscriberList>
{
public SubscriberListConfiguration()
{
HasMany(w => w.Facilities)
.WithMany(s => s.SubscriberLists)
.Map(m =>
{
m.ToTable("SubscriberListFacilities");
m.MapLeftKey("SubscriberListId");
m.MapRightKey("FacilityId");
});
}
}
Теперь у меня есть следующий ApiController
public List<SubscriberList> GetSubscriberLists()
{
var list = _context.SubscriberLists
.Include(c => c.Facilities)
.ToList();
return list;
}
При вызове запроса Get в /api/SubscriberLists я получаю следующий Json, в котором отсутствует «имя объекта»
[
{
"Id": 2,
"ClientId": 1000001,
"Facilities": [
{
"$id": "1"
}
]
},
{
"Id": 3,
"ClientId": 1000002,
"Facilities": [
{
"$id": "2"
},
{
"$id": "3"
}
]
}
]
Как видите, он не возвращает Facility.Name
, только Facility.Id
. Я попытался добавить ключевое слово virtual перед ICollection. Попытался изменить ICollection<>
на IList<>
, а также на List<>
Также попытался добавить атрибут [JsonProperty("Facilities")]
поверх поля Facilities
. Также попытался повторить возвращенный список, запрашивая средства для запуска загрузки. Пока ничего не помогло.
Интересно то, что в режиме отладки я вижу, что все загружено, как и ожидалось, я вижу, что все поля Facility.Name
заполнены. Я боюсь, что проблема здесь заключается в сериализаторе Json, но я понятия не имею, как это устранить.
Какой мой следующий шаг?
заранее спасибо
Изменить;
Стоит добавить. При переходе к URL-адресу API в браузере, который приводит к получению данных XML вместо Json, я получаю следующий результат в массиве Facilities
.
<Facilities>
<Facility xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/" z:Id="i1"/>
</Facilities>
ReferenceLoopHandling
задано значениеIgnore
. У вас есть проблемы с десериализацией этого JSON? - person Ivan Stoev   schedule 04.01.2017config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize;
Это то, что вы рекомендовали, или поясните, пожалуйста. - person Aron Einhorn   schedule 04.01.2017