Пример #1
0
        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);
        }
Пример #2
0
        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);
        }