WriteXml递归调用抛出关于StartAttribute的异常c#

时间:2014-10-01 15:25:40

标签: c# xml recursion xml-serialization

    public void WriteXml(XmlWriter w)
    {
        w.WriteAttributeString("Name", Name);

        w.WriteAttributeString("Type", GetType().Name);

        w.WriteStartElement("Actions");

        foreach (object obj in Actions)
        {
            if (obj is IAction)
            {
                XmlSerializer itemxml = new XmlSerializer(obj.GetType());

                itemxml.Serialize(w, obj);
            }
            else if (obj is ActionGroup)
            {
                var group = obj as ActionGroup;
                group.WriteXml(w);
            }
        }

        w.WriteEndElement();
    }

我的ActionGroup类中有上面的代码。 ActionGroup包含操作和操作组。当我尝试序列化它时,超过第一级的任何组一旦到达方法的第一行就会引发异常。

“状态内容中的Token StartAttribute将导致无效的XML文档。”

1 个答案:

答案 0 :(得分:1)

如果IAction类型的对象和ActionGroupActions的对象(按此顺序),则可能会发生这种情况。 XmlSerializer将关闭公开"操作"启动元素并将序列化IAction对象,这样你最终会得到类似的东西:

<Actions><IAction />

现在你看到一个ActionGroup并调用WriteXml首先想要写属性的<Actions><IAction />Name="actionName" Type="actionType" 但如果它只是这样做会导致

Name

鉴于您要求将Type和{{1}}作为属性进行编写,它会生成无效的Xml,因为您只能在元素上编写属性,而不能在内容中编写属性,因此会出现异常。