using System.ComponentModel.DataAnnotations;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NodeDeserializers;
public class ValidatingNodeDeserializer : INodeDeserializer
private readonly INodeDeserializer _nodeDeserializer;
public ValidatingNodeDeserializer(INodeDeserializer nodeDeserializer)
_nodeDeserializer = nodeDeserializer;
public bool Deserialize(EventReader reader, Type expectedType,
Func<EventReader, Type, object> nestedObjectDeserializer,
if (_nodeDeserializer.Deserialize(reader, expectedType,
nestedObjectDeserializer, out value))
var context = new ValidationContext(value, null, null);
Validator.ValidateObject(value, context, true);
public static void Main()
var deserializer = new Deserializer();
var objectDeserializer = deserializer.NodeDeserializers
Deserializer = d as ObjectNodeDeserializer,
.First(d => d.Deserializer != null);
deserializer.NodeDeserializers[objectDeserializer.Index] =
new ValidatingNodeDeserializer(objectDeserializer.Deserializer);
deserializer.Deserialize<Data>(new StringReader(@"Name: ~"));
public string Name { get; set; }