我的
WriteXml
看起来还可以,因为它以我想要的XML格式输出字典的内容。
ReadXml
是我错的地方。基于
读取XML
找到实现
in this tutorial
,我得出如下结论:
public override void ReadXml(XmlReader reader)
{
reader.MoveToContent();
bool isEmptyElement = reader.IsEmptyElement;
reader.ReadStartElement();
if (isEmptyElement)
{
return;
}
while (XmlNodeType.EndElement != reader.NodeType)
{
// Bypass XmlNodeType.Whitespace, as found in XML files
while (XmlNodeType.Element != reader.NodeType)
{
if (XmlNodeType.EndElement == reader.NodeType)
{
reader.ReadEndElement();
return;
}
reader.Read();
}
string key = reader.Name;
if (keyIsSubTree(key))
{
storeSubtree(key, reader.ReadSubtree());
}
else
{
string value = reader.ReadElementString();
storeKeyValuePair(key, value ?? string.Empty);
}
}
if (XmlNodeType.EndElement == reader.NodeType)
{
reader.ReadEndElement();
}
}
List<T>
许多词典也起了作用。我还没有为CDATA添加任何特殊处理,我相信这是必要的。不过,这似乎是个开始。
编辑:
写作
,而不是在阅读时。
更新
上面要说明的代码
XmlNodeType.Whitespace
ReadEndElement
当警察来的时候
reader.NodeType
不是一个
XmlNodeType.EndElement
当它是一个
EndElement
,也改变了
while
循环以便读者可以继续(通过
Read()
Element
而且它还没有击中目标
亲情
(例如,它击中了
Whitespace