using System.Collections.Generic;
using YamlDotNet.Serialization;
using YamlDotNet.Core.Events;
namespace YamlDotNet.Samples
var deserializer = new Deserializer();
deserializer.NodeDeserializers.Insert(0, new FloatNodeDeserializer());
var doubles = deserializer.Deserialize<List<double>>(new StringReader(@"
foreach(var value in doubles) {
Console.WriteLine(value);
public class FloatNodeDeserializer : INodeDeserializer
private static readonly Dictionary<Tuple<Type, string>, object> SpecialFloats = new Dictionary<Tuple<Type, string>, object>
{ Tuple.Create(typeof(float), ".nan"), float.NaN },
{ Tuple.Create(typeof(float), ".inf"), float.PositiveInfinity },
{ Tuple.Create(typeof(float), "-.inf"), float.NegativeInfinity },
{ Tuple.Create(typeof(double), ".nan"), double.NaN },
{ Tuple.Create(typeof(double), ".inf"), double.PositiveInfinity },
{ Tuple.Create(typeof(double), "-.inf"), double.NegativeInfinity },
bool INodeDeserializer.Deserialize(EventReader reader, Type expectedType, Func<EventReader, Type, object> nestedObjectDeserializer, out object value)
var scalar = reader.Peek<Scalar>();
var found = SpecialFloats.TryGetValue(Tuple.Create(expectedType, scalar.Value), out value);