Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 12th, 2012  |  syntax: None  |  size: 2.45 KB  |  hits: 11  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Serialization issue while returning object having collection of Navigation Objects
  2. [Serializable]
  3. [DataContract(IsReference = true)]
  4. [KnownType(typeof(Order))]
  5. public partial class Customer
  6. {
  7.     #region Primitive Properties
  8.     [DataMember]
  9.     public virtual int CustomerID { get; set; }
  10.  
  11.     [DataMember]
  12.     public virtual string CustomerCode { get; set; }
  13.  
  14.     [DataMember]
  15.     public virtual string Description  { get; set; }
  16.  
  17.     [DataMember]
  18.     public virtual string Comments { get; set; }
  19.  
  20.     [DataMember]
  21.     public virtual bool DeleteFlag { get; set; }
  22.  
  23.     [DataMember]
  24.     public virtual byte[] RowVersion { get; set; }
  25.     #endregion
  26.     #region Navigation Properties
  27.  
  28.     [DataMember]
  29.     public virtual ICollection<Order> Orders
  30.     {
  31.         get
  32.         {
  33.             if (_order == null)
  34.             {
  35.                 var newCollection = new FixupCollection<Order>();
  36.                 newCollection.CollectionChanged += FixupOrders;
  37.                 _order = newCollection;
  38.             }
  39.             return _order;
  40.         }
  41.         set
  42.         {
  43.             if (!ReferenceEquals(_order, value))
  44.             {
  45.                 var previousValue = _order as FixupCollection<Order>;
  46.                 if (previousValue != null)
  47.                 {
  48.                     previousValue.CollectionChanged -= FixupOrders;
  49.                 }
  50.                 _order = value;
  51.                 var newValue = value as FixupCollection<Order>;
  52.                 if (newValue != null)
  53.                 {
  54.                     newValue.CollectionChanged += FixupOrders;
  55.                 }
  56.             }
  57.         }
  58.     }
  59.     private ICollection<Order> _order;
  60.  
  61.     #endregion
  62.     #region Association Fixup
  63.  
  64.     private void FixupOrders(object sender, NotifyCollectionChangedEventArgs e)
  65.     {
  66.         if (e.NewItems != null)
  67.         {
  68.             foreach (Order item in e.NewItems)
  69.             {
  70.                 item.Customer = this;
  71.             }
  72.         }
  73.  
  74.         if (e.OldItems != null)
  75.         {
  76.             foreach (Order item in e.OldItems)
  77.             {
  78.                 if (ReferenceEquals(item.Customer, this))
  79.                 {
  80.                     item.Customer = null;
  81.                 }
  82.             }
  83.         }
  84.     }
  85.  
  86.     #endregion
  87. }
  88.        
  89. [WebGet(UriTemplate = "Customer",
  90.         RequestFormat = WebMessageFormat.Xml,
  91.         ResponseFormat = WebMessageFormat.Xml)]
  92. public List<Customer> Get()
  93. {
  94.     CustEntities context = new CustEntities();
  95.     return context.Customer.Include("Orders").ToList();
  96. }