我目前正在尝试将 YAML 文档反序列化为标准 .NET 对象,例如string
对于标量值和Dictionary<string, object>
对于映射,使用 YamlDotNet 库。
我猜可能是Deserializer
class 是最好的选择,但它的输出是object
and 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
?
你走在正确的轨道上INodeTypeResolver
但您需要构建并使用自定义反序列化器:
DeserializerBuilder deserializerBuilder = new DeserializerBuilder()
.WithNodeTypeResolver(new MyNodeTypeResolver());
IDeserializer deserializer = deserializerBuilder.Build();
var res = deserializer.Deserialize(input);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)