首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >YamlDotNet和自定义类型

YamlDotNet和自定义类型
EN

Stack Overflow用户
提问于 2014-11-02 14:23:54
回答 1查看 4.5K关注 0票数 5

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

  • 在yaml中使用单个感叹号定义用户定义的类型是否有意义,例如: 红色:!颜色{红色: 255,绿色: 0,蓝色:0}
  • YamlDotNet是如何反序列化的?换句话说,是否有办法确保在.net中将类型颜色映射到相应的颜色类型?
  • 根据我对以下示例https://dotnetfiddle.net/HD2JXM的理解,YamlDotNet使用yaml文档和.net类之间的隐式对应关系来映射yaml属性对应的类属性(如示例所示,这可以使用注释进行定制)。但是,不执行类型检查。

来进一步澄清问题。我有以下yaml文档,它对应于一组小部件:

代码语言:javascript
复制
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#中相应的类型层次结构:

代码语言:javascript
复制
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;}
}

请注意,这里有一个类似的问题海报:使用自定义类型解析器,这个问题还没有得到回答。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-05 14:06:10

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

为了满足您对YamlDotNet的要求,最简单的方法是使用本地标记,比如!!color,然后为该标记注册标记映射:

代码语言:javascript
复制
deserializer.RegisterTagMapping("tag:yaml.org,2002:color", typeof(Color));

您可以在DeserializeCustomTags单元测试中看到一个工作示例。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26700364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档