У меня есть веб-служба WCF с методом «Read», который выдает сериализованный в JSON список объектов Person. Каждый из этих объектов Person имеет определенный статус, представленный соответствующим объектом Status. Entity Framework отображает это как отношение внешнего ключа.
Теперь для вывода в формате JSON я не хотел, чтобы статус каждого персонажа сериализовался как полностью вложенный объект. Вместо этого я хотел, чтобы веб-сервис включал соответствующий «StatusId». Вот как я это сделал:
[DataContract]
public class Status
{
public Status() {}
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[DataMember(Name = "StatusId")]
public int StatusId { get; set; }
[DataMember(Name = "Description")]
public string Description { get; set; }
}
[DataContract]
public class Person
{
public Person() {}
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[DataMember(Name = "PersonId")]
public int PersonId { get; set; }
[DataMember(Name = "Name")]
public string Name { get; set; }
public Status Status { get; set; }
[DataMember(Name = "StatusId")]
[NotMapped]
public int JsonStatusId
{
get
{
if (Status == null) return -1;
return Status.StatusId;
}
set {}
}
}
И мой метод веб-сервиса выглядит следующим образом:
[OperationContract]
[WebGet]
public List<Person> Persons()
{
return _dbContext.Persons.
Include(person => person.Status)
Select(person => person).
ToList();
}
Пока все отлично работает. Но когда мое WebApp отправляет запрос на обновление одного из объектов, я не знаю, как сопоставить StatusId с реальным объектом Status. Вкратце: я получаю JSON-запрос, содержащий обновленный объект Person с измененным StatusId. Есть ли правильный способ получить объект Person, ссылающийся на правильный объект Status?
Спасибо всем заранее,
Florian