我正在尝试创建一个简单的模型,使用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)
答案 0 :(得分:1)
一个老问题,但是我有一个类似的问题,可以通过将继承的属性设置器的访问修饰符更改为protected
来解决。我猜这里使用的internal
修饰符在反序列化方面发挥了作用。对于有关使模型真正变为只读的问题,这可能是不需要的解决方案,但我想与以后的疑难解答者分享我的解决方案。