public override object NodeToType(Type type, YamlNode node) { var mapNode = node as YamlMappingNode; var fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); var instance = Activator.CreateInstance(type); var scalarNode = new YamlScalarNode(); foreach (var field in fields) { if (field.IsNotSerialized) { continue; } var fName = field.Name; var fType = field.FieldType; scalarNode.Value = fName; if (mapNode.Children.TryGetValue(scalarNode, out var fNode)) { var fVal = YamlEntitySerializer.NodeToType(fType, fNode); field.SetValue(instance, fVal); } } return(instance); }
public override YamlNode TypeToNode(object obj) { var node = new YamlMappingNode(); var type = obj.GetType(); var fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); foreach (var field in fields) { if (field.IsNotSerialized) { continue; } var fVal = field.GetValue(obj); // Potential recursive infinite loop? var fTypeNode = YamlEntitySerializer.TypeToNode(fVal); node.Add(field.Name, fTypeNode); } return(node); }