Exemplo n.º 1
0
            private TomlObject TryWrapInConvertProxy(TomlObject obj, Func <TomlObject> resolveParent)
            {
                var conv = obj.Root.Settings.TryGetToTomlConverter(this.clrType);

                if (conv != null)
                {
                    var convBack = obj.Root.Settings.TryGetConverter(obj.GetType(), this.clrType);
                    if (convBack != null)
                    {
                        var instance    = convBack.Convert(obj.Root, obj, this.clrType);
                        var parentTable = (TomlTable)resolveParent();
                        var proxy       = new ConversionMappingTableProxy(
                            this.key, parentTable, instance.GetType(), obj.GetType(), Toml.Create(instance), conv);
                        return(proxy);
                    }
                }

                return(obj);
            }
Exemplo n.º 2
0
        public static JToken ToJson(TomlObject obj)
        {
            switch (obj)
            {
            case TomlArray tomlArray:
            {
                var value            = new JArray();
                var isLikeTableArray = (tomlArray.Count > 0 && tomlArray[0] is TomlTable);
                foreach (var element in tomlArray.GetTomlEnumerator())
                {
                    value.Add(ToJson(element));
                }
                return(isLikeTableArray ? (JToken)value : new JObject()
                    {
                        { "type", "array" },
                        { "value", value }
                    });
            }

            case TomlBoolean tomlBoolean:
                return(new JObject
                {
                    { "type", "bool" },
                    { "value", tomlBoolean.Value.ToString(CultureInfo.InvariantCulture).ToLowerInvariant() }
                });

            case TomlDateTime tomlDateTime:
                string kindStr = "";
                switch (tomlDateTime.Kind)
                {
                case ObjectKind.OffsetDateTime:
                    kindStr = "datetime";
                    break;

                case ObjectKind.LocalDateTime:
                    kindStr = "datetime-local";
                    break;

                case ObjectKind.LocalDate:
                    kindStr = "date";
                    break;

                case ObjectKind.LocalTime:
                    kindStr = "time";
                    break;
                }
                return(new JObject
                {
                    { "type", kindStr },
                    { "value", tomlDateTime.ToString() }
                });

            case TomlFloat tomlFloat:
                return(new JObject
                {
                    { "type", "float" },
                    { "value", tomlFloat.ToString() }
                });

            case TomlInteger tomlInteger:
                return(new JObject
                {
                    { "type", "integer" },
                    { "value", tomlInteger.Value.ToString(CultureInfo.InvariantCulture).ToLowerInvariant() }
                });

            case TomlString tomlString:
                return(new JObject
                {
                    { "type", "string" },
                    { "value", tomlString.Value }
                });

            case TomlTable tomlTable:
            {
                var json = new JObject();
                // For the test we order by string key
                foreach (var keyPair in tomlTable.GetTomlEnumerator())
                {
                    json.Add(keyPair.Key, ToJson(keyPair.Value));
                }
                return(json);
            }

            case TomlTableArray tomlTableArray:
            {
                var json = new JArray();
                foreach (var element in tomlTableArray)
                {
                    json.Add(ToJson(element));
                }
                return(json);
            }
            }
            throw new NotSupportedException($"The type element `{obj.GetType()}` is not supported");
        }