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); } } } }
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); }