parent
420635d781
commit
03ee600346
@ -0,0 +1,45 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using YamlDotNet.Core;
|
||||
using YamlDotNet.Serialization;
|
||||
|
||||
namespace Trash.YamlDotNet
|
||||
{
|
||||
public class ValidatingDeserializer : INodeDeserializer
|
||||
{
|
||||
private readonly INodeDeserializer _nodeDeserializer;
|
||||
|
||||
public ValidatingDeserializer(INodeDeserializer nodeDeserializer)
|
||||
{
|
||||
_nodeDeserializer = nodeDeserializer;
|
||||
}
|
||||
|
||||
public bool Deserialize(IParser parser, Type expectedType,
|
||||
Func<IParser, Type, object?> nestedObjectDeserializer, out object? value)
|
||||
{
|
||||
if (!_nodeDeserializer.Deserialize(parser, expectedType, nestedObjectDeserializer, out value) ||
|
||||
value == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var context = new ValidationContext(value, null, null);
|
||||
|
||||
try
|
||||
{
|
||||
Validator.ValidateObject(value, context, true);
|
||||
}
|
||||
catch (ValidationException e)
|
||||
{
|
||||
if (parser.Current == null)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
|
||||
throw new YamlException(parser.Current.Start, parser.Current.End, e.Message);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in new issue