4

这可能会出什么问题:

    public void Main()
    {
        var input = new StringReader(Document);

        var deserializer = new Deserializer(namingConvention: new CamelCaseNamingConvention());
        var p = deserializer.Deserialize<Person>(input);

        Console.WriteLine(p.Name);
    }

    public class Person
    {
        public string Name {get;set;}
    }

    private const string Document = @"Name: Peter";

抛出序列化异常:

Property 'Name' not found on type 'YamlDotNet.Samples.DeserializeObjectGraph+Person'

如果我首先使用 Serializer 序列化 Person 对象,也会发生同样的情况。

虽然用于反序列化的在线示例工作得很好 - 这个琐碎的代码却没有。我错过了什么?这一定是一个愚蠢的小细节。(但它发生在我尝试过的其他数据结构之前。)

4

2 回答 2

6

看起来,问题出在namingConvention 参数上。如果我不将它设置为 CamelCaseNamingConvention 的实例,一切都很好。

不幸的是,“规范”示例(https://dotnetfiddle.net/HD2JXM)使用它,因此表明它很重要。

于 2015-02-15T10:28:20.190 回答
2

出于任何原因,CamelCaseNamingConvention 将类中的字段转换为小写(即“名称”到“名称”)。由于字符串是“名称”而不是“名称”,因此反序列化失败。该示例使用小写因此它有效....我有同样的问题....

于 2016-05-02T12:36:23.757 回答