コード例 #1
0
ファイル: TomlTable.RootTable.cs プロジェクト: mvacha/Nett
        internal static RootTable From <T>(TomlSettings settings, T obj)
        {
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }
            if (obj == null)
            {
                throw new ArgumentNullException(nameof(obj));
            }

            if ((object)obj is RootTable rt)
            {
                return(rt);
            }

            var tt = new RootTable(settings);

            if ((object)obj is IDictionary dict)
            {
                CreateFromDictionary();
            }
            else
            {
                CreateFromCustomClrObject();
            }

            return(tt);

            void CreateFromDictionary()
            {
                foreach (DictionaryEntry r in dict)
                {
                    tt.AddRow(new TomlKey((string)r.Key), TomlObject.CreateFrom(tt, r.Value));
                }
            }

            void CreateFromCustomClrObject()
            {
                var t     = obj.GetType();
                var props = settings.GetSerializationProperties(t);

                foreach (var p in props)
                {
                    object val = p.GetValue(obj, null);
                    if (val != null)
                    {
                        TomlObject to = TomlObject.CreateFrom(tt, val, p);
                        AddComments(to, p);
                        tt.AddRow(new TomlKey(p.Name), to);
                    }
                }
            }
        }
コード例 #2
0
        internal static RootTable From <T>(TomlSettings settings, T obj)
        {
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }
            if (obj == null)
            {
                throw new ArgumentNullException(nameof(obj));
            }

            var rt = obj as RootTable;

            if (rt != null)
            {
                return(rt);
            }

            var tt         = new RootTable(settings);
            var t          = obj.GetType();
            var props      = settings.GetSerializationProperties(t);
            var allObjects = new List <Tuple <string, TomlObject> >();

            foreach (var p in props)
            {
                object val = p.GetValue(obj, null);
                if (val != null)
                {
                    TomlObject to = TomlObject.CreateFrom(tt, val, p);
                    AddComments(to, p);
                    allObjects.Add(Tuple.Create(p.Name, to));
                }
            }

            tt.AddScopeTypesLast(allObjects);

            return(tt);
        }