C# 使用Yaml IEnumerable类序列化会导致奇怪的输出

C# 使用Yaml IEnumerable类序列化会导致奇怪的输出,c#,ienumerable,yamldotnet,C#,Ienumerable,Yamldotnet,反序列化/序列化的类型为(某些部分被排除在外): 公共类条目:IEnumerable{ 公共字符串名称{get;set;} 公共列表项{get;set;} 公众进入() { } 公共IEnumerator GetEnumerator() { 收益回报这一点; if(items!=null&&items.Count>0) { foreach(项目中的变量子项) { foreach(var孙子女在子代) 收益回报孙子; } } } IEnumerator IEnumerable.GetEnumera

反序列化/序列化的类型为(某些部分被排除在外):

公共类条目:IEnumerable{
公共字符串名称{get;set;}
公共列表项{get;set;}
公众进入()
{
}
公共IEnumerator GetEnumerator()
{
收益回报这一点;
if(items!=null&&items.Count>0)
{
foreach(项目中的变量子项)
{
foreach(var孙子女在子代)
收益回报孙子;
}
}
}
IEnumerator IEnumerable.GetEnumerator()
{
返回GetEnumerator();
}
}
表示没有循环引用的树数据层次结构。
当IEnumerable接口被实现时,它被实现为在当前值以下的每个子项上递归,它会导致一个奇怪的输出(见末尾)
如果删除IEnumerable接口,它将被正确序列化。
反序列化通常以两种方式工作(从原始数据)
没有错误或警告。
所以我的问题是,这是一个bug还是我做错了什么。任何见解都值得赞赏

输出(部分):


-&o0
-*o0
-&o1
-*o1
-&氧气
-*氧气
-&o3
-*o3
-&o4
-*o4
-&o5
-*o5
-&o6
-*o6
-&o7
-*o7
-*o4
-*o5
-*o6
-*o7
-*o3

预期产出(部分):


-名称:运行时
项目:
-名称:Util
项目:
-名称:NaturalStringComparer
项目:

这是因为实现
IEnumerable
的类型映射到序列,其中可枚举项返回的每个元素都被序列化为序列的一个项。但是每个元素本身就是一个
IEnumerable
,这意味着它也将被序列化为一个序列

此过程最终多次发出相同的
条目。因此,第一次序列化每个
条目
时,会为其分配一个锚点,下一次序列化程序遇到它时,会发出一个别名来引用该条目的初始引用


我认为您无法改变这种行为,因此我的建议是不要实现
IEnumerable
,而是使用一个属性生成所有节点,并用
[yamlingore]标记

库中是否有可选择退出特定成员的属性?有“Yamlingore”,但如果这是您的意思,则不能针对方法。
public class Entry : IEnumerable<Entry>{
public string name { get; set; }
public List<Entry> items { get; set; }

public Entry()
{
}

public IEnumerator<Entry> GetEnumerator()
{
    yield return this;
    if (items != null && items.Count > 0)
    {
        foreach (var child in items)
        {
            foreach (var grandChild in child)
                yield return grandChild;
        }
    }
}

IEnumerator IEnumerable.GetEnumerator()
{
    return GetEnumerator();
}
}