gpt4 book ai didi

c# - YamlDotNet 和自定义类型

转载 作者:行者123 更新时间:2023-11-30 17:46:05 27 4
gpt4 key购买 nike

我发现了 yaml 和 yamldotnet。抱歉,如果这是一个非常基本的问题:

  • 使用单个感叹号在 yaml 中定义用户定义的类型是否有意义,例如:

    red: !color { red: 255, green: 0, blue: 0 }

  • YamlDotNet 如何对其进行反序列化?换句话说,有没有办法确保颜色类型映射到 .net 中相应的颜色类型?

  • 根据我对下面例子的理解https://dotnetfiddle.net/HD2JXM , YamlDotNet 使用 yaml 文档和 .net 类之间的隐式对应关系将 yaml 属性映射到相应的类属性(如示例所示,这可以通过注释进行自定义)。但是没有进行类型检查。

进一步澄清事情。我有以下 yaml 文档,它对应一组小部件:

controls:
- Button:
id: 1
text: Hello Button World
- Label:
id: 2
text: Hello Label World
- TextView:
id: 3
content: >
This is some sample text that will appear
in a text view.

我想将它映射到 C# 中相应的类型层次结构:

class AOPage
{
public IList<AOControl> Controls { get; set; }

}

class AOControl
{
public int Id { get; set;}
}

class AOLabel : AOControl
{
public String Text { get; set;}
}

class AOButton : AOControl
{
public String Text { get; set;}
}

class AOTextView : AOControl
{
public String Contents{ get; set;}
}

注意这里有一个类似的问题海报:Using custom type resolver ,尚未得到答复。

谢谢!

最佳答案

如果您不指定标记,反序列化器将使用来自正在反序列化的对象图中的类型信息。

为了用 YamlDotNet 做你想做的事,最简单的方法是使用本地标签,比方说 !!color,然后为该标签注册一个标签映射:

deserializer.RegisterTagMapping("tag:yaml.org,2002:color", typeof(Color));

您可以在 DeserializeCustomTags unit test 中看到一个工作示例.

关于c# - YamlDotNet 和自定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26700364/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com