C# WorkflowMarkupSerializer不会在状态机工作流中保留位置

C# WorkflowMarkupSerializer不会在状态机工作流中保留位置,c#,.net,workflow,C#,.net,Workflow,我正在使用WorkflowMarkupSerializer保存状态机工作流-它可以保存状态,但不会保留它们的位置。编写工作流的代码如下所示: using (XmlWriter xmlWriter = XmlWriter.Create(fileName)) { WorkflowMarkupSerializer markupSerializer = new WorkflowMarkupSerializer();

我正在使用WorkflowMarkupSerializer保存状态机工作流-它可以保存状态,但不会保留它们的位置。编写工作流的代码如下所示:

        using (XmlWriter xmlWriter = XmlWriter.Create(fileName))
        {
            WorkflowMarkupSerializer markupSerializer
                = new WorkflowMarkupSerializer();
            markupSerializer.Serialize(xmlWriter, workflow);
        }
读取工作流的代码是:

            DesignerSerializationManager dsm
            = new DesignerSerializationManager();
        using (dsm.CreateSession())
        {
            using (XmlReader xmlReader
                = XmlReader.Create(fileName))
            {
                //deserialize the workflow from the XmlReader
                WorkflowMarkupSerializer markupSerializer
                    = new WorkflowMarkupSerializer();
                workflow = markupSerializer.Deserialize(
                    dsm, xmlReader) as Activity;

                if (dsm.Errors.Count > 0)
                {
                    WorkflowMarkupSerializationException error
                        = dsm.Errors[0]
                          as WorkflowMarkupSerializationException;
                    throw error;
                }
            }
         }

哈哈,即使是VisualStudio2008中托管的工作流设计器也会随机丢失状态的位置。这告诉我,这可能不是一项容易的任务,它是构成它的活动的外部信息。我会在主持人周围挖掘更多信息;如果我发现了什么,我会发回。

所有州的位置都保存在一个单独的文件中。您需要将其与工作流本身的标记一起拖动。幸运的是,它也是XML,因此您可以重用上面的大部分代码。若记忆有用的话,我相信它只是您的workflow.layout的名字

我同意x0n的观点-Visual Studio中的设计器非常糟糕。

好的,提供了有关如何执行此操作的良好信息-虽然到目前为止我只能保存布局,但我还无法正确使用布局。所讨论的信息大约是2/3秒,或者只是搜索.layout


如何结束自己的问题?

请注意,在示例中创建的扩展名为.layout的XML的序列化或反序列化中存在错误

它生成以下xml作为文件的第一行:

<?xml version="1.0" encoding="utf-8"?><StateMachineWorkflowDesigner xmlns:ns0="clr-namespace:System.Drawing;Assembly=System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" Name="New" Location="30, 30" Size="519, 587" AutoSizeMargin="16, 24" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow">

当读回时,size属性会导致异常。我从文件中删除了Size=519587,并正确加载了工作流。现在,我编写文件,打开它,删除大小,然后关闭它。我需要考虑一个更优雅的解决方案,但至少我现在正在保存和恢复状态机工作流。

打开控制面板->区域和语言选项,并将列表分隔符设置为“,”逗号 工作流序列化程序将使用“,”逗号作为struct SizeF的X,Y坐标的分隔符

然后选择“;”工作流序列化程序将使用“;”分号作为分隔符

序列化程序使用区域设置来序列化标记,这真是太愚蠢了