Ejemplo n.º 1
0
        /// <summary>
        /// Turn bitflags into a YAML node with the corresponding constructors.
        /// </summary>
        /// <returns>
        /// A sequence node of the flag names if the flags are non-zero, or the
        /// sequence node of the zero flag name if it is defined on the representation
        /// type. Otherwise, the scalar node 0.
        /// </returns>
        /// <exception cref="FlagSerializerException">
        /// Thrown if the serializer encounters a bit set in a position for which it
        /// cannot find a corresponding constructor.
        /// </exception>
        public override YamlNode TypeToNode(object obj, YamlObjectSerializer objectSerializer)
        {
            var flags = (int)obj;

            if (flags == 0)
            {
                var zeroName = Enum.GetName(_flagType, 0);

                // If there's no name for 0, just write 0
                if (zeroName == null)
                {
                    return(objectSerializer.TypeToNode(0));
                }
                else
                {
                    return(objectSerializer.TypeToNode(new List <string> {
                        zeroName
                    }));
                }
            }
            else
            {
                return(base.TypeToNode(flags, objectSerializer));
            }
        }
Ejemplo n.º 2
0
            public override YamlNode TypeToNode(object obj, YamlObjectSerializer serializer)
            {
                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);

                    if (fVal == null)
                    {
                        throw new ArgumentException("Cannot serialize null value inside struct field.");
                    }

                    // Potential recursive infinite loop?
                    var fTypeNode = serializer.TypeToNode(fVal);
                    node.Add(field.Name, fTypeNode);
                }

                return(node);
            }
Ejemplo n.º 3
0
        public override YamlNode TypeToNode(object obj, YamlObjectSerializer serializer)
        {
            var t = (T)obj;

            return(serializer.TypeToNode(_formatter.ToCustomFormat(t)));
        }