我目前正在尝试将 YAML 文档反序列化为标准 .NET 对象,例如 string
对于标量值和 Dictionary<string, object>
对于映射,使用 YamlDotNet 库。
我猜 Deserializer
class 是最好的选择,但它的输出是 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
产生的对象类型吗? ?
最佳答案
您使用 INodeTypeResolver
走在正确的轨道上,但您需要构建和使用自定义反序列化器:
DeserializerBuilder deserializerBuilder = new DeserializerBuilder()
.WithNodeTypeResolver(new MyNodeTypeResolver());
IDeserializer deserializer = deserializerBuilder.Build();
var res = deserializer.Deserialize(input);
关于c# - 将 YAML 反序列化为自定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23181376/