public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var obj = JObject.Load(reader); var type = obj["Type"].Value <string>(); State.IBuilder <State> result = null; switch (Enum.Parse(typeof(StateType), type)) { case StateType.Choice: result = ChoiceState.GetBuilder(); break; case StateType.Fail: result = FailState.GetBuilder(); break; case StateType.Parallel: result = ParallelState.GetBuilder(); break; case StateType.Pass: result = PassState.GetBuilder(); break; case StateType.Succeed: result = SucceedState.GetBuilder(); break; case StateType.Task: result = TaskState.GetBuilder(); break; case StateType.Wait: result = WaitState.GetBuilder(); break; case StateType.Map: result = MapState.GetBuilder(); break; } serializer.Populate(obj.CreateReader(), result); return(result); }
/// <summary> /// REQUIRED. Adds a new state to the state machine. A state machine MUST have at least one state. /// </summary> /// <param name="stateName">Name of the state</param> /// <param name="stateBuilder"> /// Instance of <see cref="State.Builder" />. Note that the <see cref="State" /> object is not built until /// the <see cref="StateMachine" /> is built so any modifications on the state model will be reflected in this object. /// </param> /// <typeparam name="T"></typeparam> /// <returns>This object for method chaining.</returns> public Builder State <T>(string stateName, State.IBuilder <T> stateBuilder) where T : State { _states.Add(stateName, stateBuilder); return(this); }