В настоящее время я пытаюсь десериализовать документ YAML в стандартные объекты .NET, такие как string
для скалярных значений и Dictionary<string, object>
для сопоставлений, используя библиотеку YamlDotNet.
Я предполагаю, что класс Deserializer
— лучший вариант, но его вывод — object
и Dictionary<object>
. Я попытался реализовать пользовательский INodeTypeResolver
следующим образом:
class MyNodeTypeResolver : INodeTypeResolver
{
bool INodeTypeResolver.Resolve(NodeEvent nodeEvent, ref Type currentType)
{
if (currentType == typeof(object))
{
if (nodeEvent is SequenceStart)
currentType = typeof(List<object>);
else if (nodeEvent is MappingStart)
currentType = typeof(Dictionary<string, object>);
else if (nodeEvent is Scalar)
currentType = typeof(string);
return true;
}
return false;
}
}
и используя его так:
Deserializer deserializer = new Deserializer();
deserializer.TypeResolvers.Add(new MyNodeTypeResolver());
var res = deserializer.Deserialize(input);
но это, кажется, не имеет никакого эффекта. Есть ли способ изменить тип объектов, создаваемых Deserializer
?