C# 如何将entity类型的observablecollection序列化为xml

C# 如何将entity类型的observablecollection序列化为xml,c#,.net,wpf,entity-framework,C#,.net,Wpf,Entity Framework,我正在与VS2015一起使用实体框架开发WPF应用程序。在这个应用程序中,我在我的一个WPF窗口中可以序列化画布,在画布上我得到了一些自定义控件 今天,我尝试向我的一个自定义控件添加一个新的dependencyproperty,它是一个类型为实体的observablecollection(在我的示例中是一个名为Formulas)的表) 通常不可能序列化泛型类型 因此,我在我的应用程序中添加了一个新类,并在代码中将其用作属性类型 public class AssignedFormulasColle

我正在与VS2015一起使用实体框架开发WPF应用程序。在这个应用程序中,我在我的一个WPF窗口中可以序列化画布,在画布上我得到了一些自定义控件

今天,我尝试向我的一个自定义控件添加一个新的dependencyproperty,它是一个类型为实体的observablecollection(在我的示例中是一个名为
Formulas
)的表)

通常不可能序列化泛型类型

因此,我在我的应用程序中添加了一个新类,并在代码中将其用作属性类型

public class AssignedFormulasCollection : ObservableCollection<Formulas>
{
    public AssignedFormulasCollection()
    {
    }

    public AssignedFormulasCollection(List<Formulas> list) : base(list)
    {
    }
}
我通过以下方法序列化画布:

public string SerializeControlToXaml(FrameworkElement element)
{
    var elementToXaml = new StringBuilder();
    var settings = new XmlWriterSettings();
    settings.Indent = true;
    settings.OmitXmlDeclaration = true;
    var serializationManager = new 
XamlDesignerSerializationManager(XmlWriter.Create(elementToXaml, settings));
    serializationManager.XamlWriterMode = XamlWriterMode.Expression;
    XamlWriter.Save(element, serializationManager);
    var xaml = elementToXaml.ToString();

    return xaml;
}
但是,当我尝试使用自定义控件序列化画布时,会收到以下错误消息:

用户代码未处理System.Reflection.TargetInvocationException异常。
HResult=-2146232828
Message=System.Data.Entity.DynamicProxies.Formulas的PropertyAccessorDescriptions\u CF5776A4E794BA378BEDBE1E29E7967B4AACCF844AB5416006C852677145A0A对象导致以下异常:ObjectContext实例被丢弃,无法再用于需要连接的事务

来源=系统

StackTrace:
位于System.ComponentModel.ReflectPropertyDescriptor.GetValue(对象组件)
位于System.Windows.Markup.Primitives.ElementProperty.get_Value()
位于System.Windows.Markup.Primitives.ElementPropertyBase.get_IsComposite()
位于System.Windows.Markup.Primitives.MarkupWriter.RecordNamespaces(ScopeScope、MarkupObject项、IValueSerializerContext上下文、布尔lastWasString)
位于System.Windows.Markup.Primitives.MarkupWriter.RecordNamespaces(ScopeScope、MarkupObject项、IValueSerializerContext上下文、布尔lastWasString) 位于System.Windows.Markup.Primitives.MarkupWriter.RecordNamespaces(ScopeScope、MarkupObject项、IValueSerializerContext上下文、布尔lastWasString) 位于System.Windows.Markup.Primitives.MarkupWriter.RecordNamespaces(ScopeScope、MarkupObject项、IValueSerializerContext上下文、布尔lastWasString) 位于System.Windows.Markup.Primitives.MarkupWriter.WriteItem(MarkupObject项) 位于System.Windows.Markup.Primitives.MarkupWriter.SaveAsXml(XmlWriter编写器,MarkupObject项) 位于System.Windows.Markup.Primitives.MarkupWriter.SaveAsXml(XmlWriter编写器、对象实例、XamlDesignerSerializationManager) 位于System.Windows.Markup.XamlWriter.Save(对象对象对象,XamlDesignerSerializationManager) 在C:\svn\u checkout\P16\u RoeV\Sourcen\P16Admintool\u develope\P16Common\XamlDeSerializer.SerializeControlToXaml(FrameworkElement元素)中的P16Common.XamlDeSerializer.serialized中:第50行。 在P16Common.CommonMethods.SerializeToXml(FrameworkElement designerGrid)到C:\svn\u checkout\P16\u RoeV\Sourcen\P16Admintool\u develope\P16Common\CommonMethods.cs:第61行。 在P16Admintool.Helper.InputMaskHelper.UpdateInputMask(InputMasksView designerwindow)中,将C:\svn\u checkout\P16\u RoeV\Resources\P16Admintool\u develop\P16Admintool\Helper\InputMaskHelper.cs更新为C:\svn\u checkout\P16\u RoeV\Resources\P16Admintool\u developer\P16Admintool。 在C:\svn\u checkout\P16\u RoeV\Sourcen\P16Admintool\u develop\P16Admintool\ViewModels\changelementproperties viewmodel.SetElementProperties()中的P16Admintool.ViewModels.changelementproperties()处:第152行。 对于P16Admintool.Views.changelementproperties.btn\u set\u properties\u单击C:\svn\u checkout\P16\u RoeV\Resources\P16Admintool\u develop\P16Admintool\Views\changelementproperties.xaml.cs:第77行中的(对象发送方,路由目标)。 位于System.Windows.RoutedEventHandlerInfo.InvokeHandler(对象目标,RoutedEventTargets RoutedEventTargets) 在System.Windows.EventRoute.InvokeHandlersImpl(对象源、RoutedEventArgsArgs、布尔重调) 位于System.Windows.UIElement.RaiseEventImpl(DependencyObject发送方,RoutedEventTargets参数) 在System.Windows.UIElement.RaiseEvent(路由事件目标e)处 在System.Windows.Controls.Primitives.ButtonBase.OnClick()中 在System.Windows.Controls.Button.OnClick()处 在System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)中 位于System.Windows.UIElement.OnMouseLeftButtonUpThunk(对象发送器,鼠标按钮文塔) 在System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler处(委托genericHandler,对象genericTarget) 位于System.Windows.RoutedEventArgs.InvokeHandler(委托处理程序,对象目标) 位于System.Windows.RoutedEventHandlerInfo.InvokeHandler(对象目标,RoutedEventTargets RoutedEventTargets) 在System.Windows.EventRoute.InvokeHandlersImpl(对象源、RoutedEventArgsArgs、布尔重调) 位于System.Windows.UIElement.ReRaiseEvents(DependencyObject发送方、RoutedEventArgs参数、RoutedEvent newEvent) 位于System.Windows.UIElement.OnMouseUpThunk(对象发送器,鼠标按钮Ventargs e) 在System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler处(委托genericHandler,对象genericTarget) 位于System.Windows.RoutedEventArgs.InvokeHandler(委托处理程序,对象目标) 位于System.Windows.RoutedEventHandlerInfo.InvokeHandler(对象目标,RoutedEventTargets RoutedEventTargets) 在System.Windows.EventRoute.InvokeHandlersImpl(对象源、RoutedEventArgsArgs、布尔重调) 位于System.Windows.UIElement.RaiseEventImpl(DependencyObject发送方,RoutedEventTargets参数) 在System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs参数)处 ?
public string SerializeControlToXaml(FrameworkElement element)
{
    var elementToXaml = new StringBuilder();
    var settings = new XmlWriterSettings();
    settings.Indent = true;
    settings.OmitXmlDeclaration = true;
    var serializationManager = new 
XamlDesignerSerializationManager(XmlWriter.Create(elementToXaml, settings));
    serializationManager.XamlWriterMode = XamlWriterMode.Expression;
    XamlWriter.Save(element, serializationManager);
    var xaml = elementToXaml.ToString();

    return xaml;
}
public virtual Descriptions Descriptions { get; set; }
public virtual ICollection<Formula_Attributes> Formula_Attributes { get; set; }
public virtual ICollection<Formula_Field_Attributes> Formula_Field_Attributes { get; set; }
public virtual ICollection<Input_Field_Formulas> Input_Field_Formulas { get; set; }
public virtual ICollection<Stepfunctions> Stepfunctions { get; set; }