-
- /*
- # Microshaoft
- /r:System.Xaml.dll
- /r:System.Activities.dll
- /r:System.Activities.DurableInstancing.dll
- /r:System.Runtime.DurableInstancing.dll
- /r:"D:\Microshaoft.Nuget.Packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll"
- */
- namespace Microshaoft
- {
- using Newtonsoft.Json.Linq;
- using System;
- using System.Activities;
- using System.Activities.Tracking;
- using System.Activities.XamlIntegration;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Reflection;
- using System.Xaml;
- using System.Xml;
- using System.Runtime.DurableInstancing;
- public static class WorkFlowHelper
- {
- public static WorkflowApplication CreateWorkflowApplication
- (
- string xaml
- , string localAssemblyFilePath = null
- , Func<InstanceStore> onPersistProcessFunc = null
- )
- {
- var activity = XamlToActivity
- (
- xaml
- , localAssemblyFilePath
- );
- WorkflowApplication workflowApplication = new WorkflowApplication(activity);
- if (onPersistProcessFunc != null)
- {
- workflowApplication.InstanceStore = onPersistProcessFunc();
- }
- return workflowApplication;
- }
- public static Activity XamlToActivity
- (
- string xaml
- , string localAssemblyFilePath = null
- )
- {
- Assembly localAssembly = null;
- if (string.IsNullOrEmpty(localAssemblyFilePath))
- {
- localAssembly = Assembly
- .GetExecutingAssembly();
- }
- else
- {
- localAssembly = Assembly
- .LoadFrom(localAssemblyFilePath);
- }
- var stringReader = new StringReader(xaml);
- var xmlReader = XmlReader.Create(stringReader);
- var xamlXmlReader = new XamlXmlReader
- (
- xmlReader
- , new XamlXmlReaderSettings()
- {
- LocalAssembly = localAssembly
- }
- );
- var xamlReader = ActivityXamlServices
- .CreateReader
- (
- xamlXmlReader
- );
- var activity = ActivityXamlServices
- .Load
- (
- xamlReader
- , new ActivityXamlServicesSettings()
- {
- CompileExpressions = true
- }
- );
- return activity;
- }
- public static TrackingProfile GetTrackingProfileFromJson
- (
- string json
- , bool isArray = false
- )
- {
- TrackingProfile trackingProfile = null;
- var trackingQueries = GetTrackingQueriesFromJson(json, isArray);
- if (trackingQueries != null)
- {
- foreach (var trackingQuery in trackingQueries)
- {
- if (trackingProfile == null)
- {
- trackingProfile = new TrackingProfile();
- }
- trackingProfile
- .Queries
- .Add(trackingQuery);
- }
- }
- return trackingProfile;
- }
- public static TrackingParticipant GetTrackingParticipantFromJson<TTrackingParticipant>
- (
- string json
- , bool isArray = false
- )
- where TTrackingParticipant : TrackingParticipant, new()
- {
- TrackingParticipant trackingParticipant = null;
- TrackingProfile trackingProfile
- = GetTrackingProfileFromJson(json, isArray);
- if (trackingProfile != null)
- {
- trackingParticipant = new TTrackingParticipant();
- trackingParticipant.TrackingProfile = trackingProfile;
- }
- return trackingParticipant;
- }
- public static IEnumerable<TrackingQuery> GetTrackingQueriesFromJson
- (
- string json
- , bool isArray = false
- )
- {
- IEnumerable<TrackingQuery> r = null;
- if (isArray)
- {
- //闭包
- var key = string.Empty;
- r = JsonHelper
- .DeserializeToFromDictionary<string, JObject[], JObject[]>
- (
- json
- , (x, y) =>
- {
- //闭包
- key = x;
- return y;
- }
- )
- .SelectMany
- (
- (x) =>
- {
- return x;
- }
- )
- .Select
- (
- (x) =>
- {
- //闭包
- return
- GetTrackingQuery(key, x);
- }
- );
- }
- else
- {
- r = JsonHelper
- .DeserializeToFromDictionary<string, JObject, TrackingQuery>
- (
- json
- , (x, y) =>
- {
- return GetTrackingQuery(x, y);
- }
- );
- }
- return r;
- }
- public static TrackingQuery GetTrackingQuery(string queryName, JObject jObject)
- {
- var json = jObject.ToString();
- return
- GetTrackingQuery
- (
- queryName
- , json
- );
- }
- public static TrackingQuery GetTrackingQuery(string queryName, string json)
- {
- TrackingQuery r = null;
- if (string.Compare(queryName, "WorkflowInstanceQuery", true) == 0)
- {
- r = JsonHelper
- .DeserializeByJTokenPath<WorkflowInstanceQuery>
- (
- json
- );
- }
- else if (string.Compare(queryName, "ActivityStateQuery", true) == 0)
- {
- r = JsonHelper
- .DeserializeByJTokenPath<ActivityStateQuery>
- (
- json
- );
- }
- else if (string.Compare(queryName, "CustomTrackingQuery", true) == 0)
- {
- r = JsonHelper
- .DeserializeByJTokenPath<CustomTrackingQuery>
- (
- json
- );
- }
- else if (string.Compare(queryName, "FaultPropagationQuery", true) == 0)
- {
- r = JsonHelper
- .DeserializeByJTokenPath<FaultPropagationQuery>
- (
- json
- );
- }
- else if (string.Compare(queryName, "BookmarkResumptionQuery", true) == 0)
- {
- r = JsonHelper
- .DeserializeByJTokenPath<BookmarkResumptionQuery>
- (
- json
- );
- }
- else if (string.Compare(queryName, "ActivityScheduledQuery", true) == 0)
- {
- r = JsonHelper
- .DeserializeByJTokenPath<ActivityScheduledQuery>
- (
- json
- );
- }
- else if (string.Compare(queryName, "CancelRequestedQuery", true) == 0)
- {
- r = JsonHelper
- .DeserializeByJTokenPath<CancelRequestedQuery>
- (
- json
- );
- }
- return r;
- }
- }
- }
- namespace Microshaoft
- {
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- using System;
- using System.IO;
- using System.Linq;
- using System.Xml.Linq;
- using System.Collections.Generic;
- public static class JsonHelper
- {
- public static string XmlToJson
- (
- string xml
- , Newtonsoft
- .Json
- .Formatting formatting
- = Newtonsoft
- .Json
- .Formatting
- .Indented
- , bool needKeyQuote = false
- )
- {
- XNode xElement;
- xElement = XElement.Parse(xml).Elements().First();
- string json = string.Empty;
- using (var stringWriter = new StringWriter())
- {
- using (var jsonTextWriter = new JsonTextWriter(stringWriter))
- {
- jsonTextWriter.Formatting = formatting;
- jsonTextWriter.QuoteName = needKeyQuote;
- var jsonSerializer = new JsonSerializer();
- jsonSerializer.Serialize(jsonTextWriter, xElement);
- json = stringWriter.ToString();
- }
- }
- return json;
- }
- public static string JsonToXml
- (
- string json
- , bool needRoot = false
- , string defaultDeserializeRootElementName = "root"
- )
- {
- if (needRoot)
- {
- json = string.Format
- (
- @"{{ {1}{0}{2} }}"
- , " : "
- , defaultDeserializeRootElementName
- , json
- );
- }
- //XmlDocument xmlDocument = JsonConvert.DeserializeXmlNode(json, defaultDeserializeRootElementName);
- var xDocument = JsonConvert
- .DeserializeXNode
- (
- json
- , defaultDeserializeRootElementName
- );
- var xml = xDocument
- .Elements()
- .First()
- .ToString();
- return xml;
- }
- public static T DeserializeByJTokenPath<T>
- (
- string json
- , string jTokenPath = null //string.Empty
- )
- {
- var jObject = JObject.Parse(json);
- var jsonSerializer = new JsonSerializer();
- if (string.IsNullOrEmpty(jTokenPath))
- {
- jTokenPath = string.Empty;
- }
- var jToken = jObject.SelectToken(jTokenPath);
- using (var jsonReader = jToken.CreateReader())
- {
- return
- jsonSerializer
- .Deserialize<T>(jsonReader);
- }
- }
- public static string Serialize
- (
- object target
- , bool formattingIndented = false
- , bool keyQuoteName = false
- )
- {
- string json = string.Empty;
- using (StringWriter stringWriter = new StringWriter())
- {
- using (var jsonTextWriter = new JsonTextWriter(stringWriter))
- {
- jsonTextWriter.QuoteName = keyQuoteName;
- jsonTextWriter.Formatting = (formattingIndented ? Formatting.Indented : Formatting.None);
- var jsonSerializer = new JsonSerializer();
- jsonSerializer.Serialize(jsonTextWriter, target);
- json = stringWriter.ToString();
- }
- }
- return json;
- }
- public static void ReadJsonPathsValuesAsStrings
- (
- string json
- , string[] jsonPaths
- , Func<string, string, bool> onReadedOncePathStringValueProcesssFunc = null
- )
- {
- using (var stringReader = new StringReader(json))
- {
- using (var jsonReader = new JsonTextReader(stringReader))
- {
- bool breakAndReturn = false;
- while
- (
- jsonReader.Read()
- &&
- !breakAndReturn
- )
- {
- foreach (var x in jsonPaths)
- {
- if (x == jsonReader.Path)
- {
- if (onReadedOncePathStringValueProcesssFunc != null)
- {
- var s = jsonReader.ReadAsString();
- breakAndReturn
- = onReadedOncePathStringValueProcesssFunc
- (
- x
- , s
- );
- if (breakAndReturn)
- {
- break;
- }
- }
- }
- }
- }
- }
- }
- }
- public static IEnumerable<TElement>
- DeserializeToFromDictionary<TKey, TValue, TElement>
- (
- string json
- , Func<TKey, TValue, TElement> OnOneElementProcessFunc
- )
- {
- //IEnumerable<TElement> r = default(IEnumerable<TElement>);
- return
- DeserializeByJTokenPath<Dictionary<TKey, TValue>>(json)
- .Select
- (
- (x) =>
- {
- var rr = OnOneElementProcessFunc(x.Key, x.Value);
- return rr;
- }
- );
- //return r;
- }
- }
- }
- namespace Microshaoft
- {
- using System;
- using System.Activities.Tracking;
- public class CommonTrackingParticipant : TrackingParticipant
- {
- public Func<TrackingRecord, TimeSpan, bool> OnTrackingRecordReceived;
- protected override void Track(TrackingRecord record, TimeSpan timeout)
- {
- var r = false;
- if (OnTrackingRecordReceived != null)
- {
- r = OnTrackingRecordReceived(record, timeout);
- }
- }
- }
- }
|