C# WorkflowMarkupSerializer不会在状态机工作流中保留位置
我正在使用WorkflowMarkupSerializer保存状态机工作流-它可以保存状态,但不会保留它们的位置。编写工作流的代码如下所示:C# WorkflowMarkupSerializer不会在状态机工作流中保留位置,c#,.net,workflow,C#,.net,Workflow,我正在使用WorkflowMarkupSerializer保存状态机工作流-它可以保存状态,但不会保留它们的位置。编写工作流的代码如下所示: using (XmlWriter xmlWriter = XmlWriter.Create(fileName)) { WorkflowMarkupSerializer markupSerializer = new 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坐标的分隔符 然后选择“;”工作流序列化程序将使用“;”分号作为分隔符 序列化程序使用区域设置来序列化标记,这真是太愚蠢了