title: How to map XML document to entity framework object?
body: <p>I have following entity framework object:</p>
  
  <pre><code>namespace Proj.Accounting.Entity
  {
      using System;
      using System.Collections.Generic;
      using System.Xml.Serialization;
  
      public partial class DocumentStatus
      {
          public DocumentStatus()
          {
              this.Documents = new HashSet&lt;Document&gt;();
              this.DocumentsTrackings = new HashSet&lt;DocumentsTracking&gt;();
              this.DocumentsTrackingChildDocuments = new HashSet&lt;DocumentsTrackingChildDocument&gt;();
          }
          [XmlElement("StateId")]
          public int StateId { get; set; }
          [XmlElement("StateName")]
          public string StateName { get; set; }
          [XmlElement("GroupId")]
          public Nullable&lt;int&gt; GroupId { get; set; }
  
          public virtual ICollection&lt;Document&gt; Documents { get; set; }
          public virtual ICollection&lt;DocumentsTracking&gt; DocumentsTrackings { get; set; }
          public virtual ICollection&lt;DocumentsTrackingChildDocument&gt; DocumentsTrackingChildDocuments { get; set; }
      }
  }
  </code></pre>
  
  <p>I have following class to map the entity with the xml fields (doesn't work like that):</p>
  
  <pre><code>using System;
  using System.Collections;
  using System.IO;
  using System.Xml.Serialization;
  
  namespace Proj.Accounting.Data
  {
      class XMLObjects
      {
          public static T ConvertXmlToClass&lt;T&gt;(string xml)
          {
              var serializer = new XmlSerializer(typeof(T));
              return (T)serializer.Deserialize(new StringReader(xml));
          }
      }
  }
  </code></pre>
  
  <p>and the method I am using to map the data:</p>
  
  <pre><code>private void button1_Click(object sender, EventArgs e)
  {
      string xml = "";
      xml +=  "&lt;?xml version=\"1.0\" encoding=\"UTF - 8\"?&gt;";
      xml +=  "&lt;root&gt;";
      xml += " &lt;success&gt;true&lt;/success&gt;";
      xml +=  " &lt;data&gt;";
      xml += " &lt;item&gt;";
      xml += " &lt;StateId&gt;0&lt;/StateId&gt;";
      xml += " &lt;StateName&gt;Шаблон&lt;/StateName&gt;";
      xml += " &lt;GroupId&gt;0&lt;/GroupId&gt;";
      xml += " &lt;/item&gt;";
      xml +=  "&lt;/root&gt;";
      DocumentStatus documentStatus = new DocumentStatus();
      documentStatus = XMLObjects.ConvertXmlToClass&lt;DocumentStatus&gt;(xml);
      int a = 0;
  }
  </code></pre>
  
  <p>I am getting following exception</p>
  
  <pre>
  System.InvalidOperationException was unhandled   HResult=-2146233079  
   Message=There was an error reflecting type 'Proj.Accounting.Entity.DocumentStatus'. Source=System.Xml  
   StackTrace:
          at System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(TypeModel model, String ns, ImportContext context, String dataType, XmlAttributes a, Boolean repeats, Boolean openModel, RecursionLimiter limiter)
          at System.Xml.Serialization.XmlReflectionImporter.ImportElement(TypeModel model, XmlRootAttribute root, String defaultNamespace, RecursionLimiter limiter)
          at System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(Type type, XmlRootAttribute root, String defaultNamespace)
          at System.Xml.Serialization.XmlSerializer..ctor(Type type, String defaultNamespace)
          at System.Xml.Serialization.XmlSerializer..ctor(Type type)
          at Proj.Accounting.Data.XMLObjects.ConvertXmlToClass[T](String xml) in c:\Users\username\Dropbox\Dev\Proj.Accounting\Proj.Accounting.Data\XMLObjects.cs:line 12
          at Proj.Accounting.Data.MainForm.button1_Click(Object sender, EventArgs e) in c:\Users\username\Dropbox\Dev\Proj.Accounting\Proj.Accounting.Data\MainForm.cs:line 36
          at System.Windows.Forms.Control.OnClick(EventArgs e)
          at System.Windows.Forms.Button.OnClick(EventArgs e)
          at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
          at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
          at System.Windows.Forms.Control.WndProc(Message& m)
          at System.Windows.Forms.ButtonBase.WndProc(Message& m)
          at System.Windows.Forms.Button.WndProc(Message& m)
          at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&m)
          at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
          at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
          at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
          at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
          at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
          at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
          at System.Windows.Forms.Application.Run(Form mainForm)
          at Proj.Accounting.Data.Program.Main() in c:\Users\username\Dropbox\Dev\Proj.Accounting\Proj.Accounting.Data\Program.cs:line 19
          at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
          at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
          at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
          at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
          at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
          at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
          at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
          at System.Threading.ThreadHelper.ThreadStart()   InnerException: System.InvalidOperationException HResult=-2146233079
          Message=Cannot serialize member 'Proj.Accounting.Entity.DocumentStatus.Documents' of type 'System.Collections.Generic.ICollection`1[[Proj.Accounting.Entity.Document,
   Proj.Accounting.Entity, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]', see inner exception for more details.
          Source=System.Xml
          StackTrace:
               at System.Xml.Serialization.StructModel.CheckSupportedMember(TypeDesc typeDesc, MemberInfo member, Type type)
               at System.Xml.Serialization.StructModel.GetPropertyModel(PropertyInfo propertyInfo)
               at System.Xml.Serialization.StructModel.GetFieldModel(MemberInfo memberInfo)
               at System.Xml.Serialization.XmlReflectionImporter.InitializeStructMembers(StructMapping mapping, StructModel model, Boolean openModel, String typeName, RecursionLimiter limiter)
               at System.Xml.Serialization.XmlReflectionImporter.ImportStructLikeMapping(StructModel model, String ns, Boolean openModel, XmlAttributes a, RecursionLimiter limiter)
               at System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(TypeModel model, String ns, ImportContext context, String dataType, XmlAttributes a, Boolean repeats, Boolean openModel, RecursionLimiter limiter)
          InnerException: System.NotSupportedException
               HResult=-2146233067
               Message=Cannot serialize member Proj.Accounting.Entity.DocumentStatus.Documents of type
   System.Collections.Generic.ICollection`1[[Proj.Accounting.Entity.Document,
   Proj.Accounting.Entity, Version=1.0.0.0, Culture=neutral,
   PublicKeyToken=null]] because it is an interface.
               InnerException:
  </pre>