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文档。”
答案 0 :(得分:1)
如果IAction
类型的对象和ActionGroup
中Actions
的对象(按此顺序),则可能会发生这种情况。 XmlSerializer
将关闭公开"操作"启动元素并将序列化IAction
对象,这样你最终会得到类似的东西:
<Actions><IAction />
现在你看到一个ActionGroup
并调用WriteXml
首先想要写属性的<Actions><IAction />Name="actionName" Type="actionType"
但如果它只是这样做会导致
Name
鉴于您要求将Type
和{{1}}作为属性进行编写,它会生成无效的Xml,因为您只能在元素上编写属性,而不能在内容中编写属性,因此会出现异常。