5

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

但由于某种原因,该库引发了一个异常,说明:

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

我正在使用别名,但即使是从头开始,并且使用具有正确属性名称的测试类也不能正确设置它。

我究竟做错了什么?我是否误解了应该如何使用该库?

调用 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...
}

可以在此处找到具有相同错误的小型控制台测试应用程序

4

1 回答 1

1

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

于 2020-05-27T14:27:20.607 回答