示例#1
0
        public ILifecycleActions Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver)
        {
            if (reader.GetCurrentJsonToken() != JsonToken.BeginObject)
            {
                reader.ReadNextBlock();
                return(null);
            }

            var lifecycles = new Dictionary <string, ILifecycleAction>();
            var count      = 0;

            while (reader.ReadIsInObject(ref count))
            {
                var type = reader.ReadPropertyNameSegmentRaw();
                ILifecycleAction lifecycleAction = null;

                if (LifeCycleActions.TryGetValue(type, out var value))
                {
                    switch (value)
                    {
                    case 0:
                        lifecycleAction = formatterResolver.GetFormatter <AllocateLifecycleAction>()
                                          .Deserialize(ref reader, formatterResolver);
                        break;

                    case 1:
                        lifecycleAction = formatterResolver.GetFormatter <DeleteLifecycleAction>()
                                          .Deserialize(ref reader, formatterResolver);
                        break;

                    case 2:
                        lifecycleAction = formatterResolver.GetFormatter <ForceMergeLifecycleAction>()
                                          .Deserialize(ref reader, formatterResolver);
                        break;

                    case 3:
                        lifecycleAction = formatterResolver.GetFormatter <FreezeLifecycleAction>()
                                          .Deserialize(ref reader, formatterResolver);
                        break;

                    case 4:
                        lifecycleAction = formatterResolver.GetFormatter <ReadOnlyLifecycleAction>()
                                          .Deserialize(ref reader, formatterResolver);
                        break;

                    case 5:
                        lifecycleAction = formatterResolver.GetFormatter <RolloverLifecycleAction>()
                                          .Deserialize(ref reader, formatterResolver);
                        break;

                    case 6:
                        lifecycleAction = formatterResolver.GetFormatter <SetPriorityLifecycleAction>()
                                          .Deserialize(ref reader, formatterResolver);
                        break;

                    case 7:
                        lifecycleAction = formatterResolver.GetFormatter <ShrinkLifecycleAction>()
                                          .Deserialize(ref reader, formatterResolver);
                        break;

                    case 8:
                        lifecycleAction = formatterResolver.GetFormatter <UnfollowLifecycleAction>()
                                          .Deserialize(ref reader, formatterResolver);
                        break;

                    case 9:
                        lifecycleAction = formatterResolver.GetFormatter <WaitForSnapshotLifecycleAction>()
                                          .Deserialize(ref reader, formatterResolver);
                        break;
                    }

                    lifecycles.Add(type.Utf8String(), lifecycleAction);
                }
                else
                {
                    reader.ReadNextBlock();
                }
            }

            return(new LifecycleActions(lifecycles));
        }
示例#2
0
 private void Serialize <TLifecycleAction>(ref JsonWriter writer, ILifecycleAction value, IJsonFormatterResolver formatterResolver)
     where TLifecycleAction : ILifecycleAction =>
 formatterResolver.GetFormatter <TLifecycleAction>().Serialize(ref writer, (TLifecycleAction)value, formatterResolver);