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, out object value)
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.Select((d, i) => new
Deserializer = d as ObjectNodeDeserializer, Index = i
).First(d => d.Deserializer != null);
deserializer.NodeDeserializers[objectDeserializer.Index] = new ValidatingNodeDeserializer(objectDeserializer.Deserializer);
deserializer.Deserialize<Data>(new StringReader(@"Name: ~"));