- Serialization issue while returning object having collection of Navigation Objects
- [Serializable]
- [DataContract(IsReference = true)]
- [KnownType(typeof(Order))]
- public partial class Customer
- {
- #region Primitive Properties
- [DataMember]
- public virtual int CustomerID { get; set; }
- [DataMember]
- public virtual string CustomerCode { get; set; }
- [DataMember]
- public virtual string Description { get; set; }
- [DataMember]
- public virtual string Comments { get; set; }
- [DataMember]
- public virtual bool DeleteFlag { get; set; }
- [DataMember]
- public virtual byte[] RowVersion { get; set; }
- #endregion
- #region Navigation Properties
- [DataMember]
- public virtual ICollection<Order> Orders
- {
- get
- {
- if (_order == null)
- {
- var newCollection = new FixupCollection<Order>();
- newCollection.CollectionChanged += FixupOrders;
- _order = newCollection;
- }
- return _order;
- }
- set
- {
- if (!ReferenceEquals(_order, value))
- {
- var previousValue = _order as FixupCollection<Order>;
- if (previousValue != null)
- {
- previousValue.CollectionChanged -= FixupOrders;
- }
- _order = value;
- var newValue = value as FixupCollection<Order>;
- if (newValue != null)
- {
- newValue.CollectionChanged += FixupOrders;
- }
- }
- }
- }
- private ICollection<Order> _order;
- #endregion
- #region Association Fixup
- private void FixupOrders(object sender, NotifyCollectionChangedEventArgs e)
- {
- if (e.NewItems != null)
- {
- foreach (Order item in e.NewItems)
- {
- item.Customer = this;
- }
- }
- if (e.OldItems != null)
- {
- foreach (Order item in e.OldItems)
- {
- if (ReferenceEquals(item.Customer, this))
- {
- item.Customer = null;
- }
- }
- }
- }
- #endregion
- }
- [WebGet(UriTemplate = "Customer",
- RequestFormat = WebMessageFormat.Xml,
- ResponseFormat = WebMessageFormat.Xml)]
- public List<Customer> Get()
- {
- CustEntities context = new CustEntities();
- return context.Customer.Include("Orders").ToList();
- }