Ejemplo n.º 1
0
        private static object?DeserializeEnumResult(IInputType inputType, object?value)
        {
            switch (value)
            {
            case IReadOnlyList <object> list:
            {
                var elementType      = (IInputType)inputType.ElementType();
                var deserializedList = (IList)Activator.CreateInstance(inputType.RuntimeType) !;

                foreach (object?item in list)
                {
                    deserializedList.Add(DeserializeEnumResult(elementType, item));
                }

                return(deserializedList);
            }

            case ListValueNode listLiteral:
            {
                var elementType = (IInputType)inputType.ElementType();
                var list        = new List <object?>();

                foreach (IValueNode item in listLiteral.Items)
                {
                    list.Add(DeserializeEnumResult(elementType, item));
                }

                return(list);
            }

            case StringValueNode stringLiteral:
                return(inputType.Deserialize(stringLiteral.Value));

            case IValueNode literal:
                return(inputType.ParseLiteral(literal));

            default:
                return(inputType.Deserialize(value));
            }
        }
Ejemplo n.º 2
0
        private static object?DeserializeScalarResult(IInputType inputType, object?value)
        {
            switch (value)
            {
            case IReadOnlyList <object> list:
            {
                IInputType elementType = inputType;
                Type       runtimeType = typeof(List <object>);
                if (inputType.IsListType())
                {
                    elementType = (IInputType)inputType.ElementType();
                    runtimeType = inputType.RuntimeType;
                }

                var deserializedList =
                    (IList)Activator.CreateInstance(runtimeType) !;

                foreach (object?item in list)
                {
                    deserializedList.Add(DeserializeScalarResult(elementType, item));
                }

                return(deserializedList);
            }

            case ListValueNode listLiteral:
            {
                var elementType = (IInputType)inputType.ElementType();
                var list        = new List <object?>();

                foreach (IValueNode item in listLiteral.Items)
                {
                    list.Add(DeserializeScalarResult(elementType, item));
                }

                return(list);
            }

            case IValueNode literal:
                return(inputType.ParseLiteral(literal));

            default:
                return(inputType.Deserialize(value));
            }
        }