YamlDotNet无法找到属性

时间:2016-12-23 11:24:03

标签: c# yamldotnet

我正在尝试创建一个简单的模型,使用YamlDotNet将yaml文件解析为我的域对象。需要注意的是,我希望域模型是只读的,所以我试图通过继承和内部设置器来解决这个问题。

出于某种原因,该库引发了一个异常陈述:

  

在类型上找不到属性'HtmlTemplate'   'ConsoleApplication1.Repositories.YamlTemplateRepository + DeserializeableTemplate'。

我正在使用一个别名,但即便如此,并且使用具有正确属性名称的测试类也没有将其设置正确。

我做错了什么?我误解了库应该如何使用吗?

调用YamlDotNet的代码如下所示:

deserializer.Deserialize<DeserializeableTemplate>(yamlContents);

我正在反序列化的类看起来像这样:

private class DeserializeableTemplate : Template
{
  [YamlMember(Alias = "HtmlTemplate")]
  public string HtmlTemplateWrapper
  {
    get { return HtmlTemplate; }
    set { HtmlTemplate = value; }
  }

  // A few more properties...
}

和我继承的课程:

public class Template
{
  public string HtmlTemplate { get; internal set; }
  // A few more properties...
}

Small console test application with the same error can be found here

1 个答案:

答案 0 :(得分:1)

一个老问题,但是我有一个类似的问题,可以通过将继承的属性设置器的访问修饰符更改为protected来解决。我猜这里使用的internal修饰符在反序列化方面发挥了作用。对于有关使模型真正变为只读的问题,这可能是不需要的解决方案,但我想与以后的疑难解答者分享我的解决方案。