我有 2 个 XDocument。一个是一些元数据,另一个是大量数据。
在 Xbox (XNA) 上,我希望能够将两者都保存到文件流中,首先是元数据 XDoc,然后是实际数据 XDoc。
然后我希望能够仅访问元数据 XDoc(忽略文件流的其余部分),并且还能够访问元数据 XDoc 和数据 XDoc。
目前我正在保存/加载如下:
public void Serialise(Stream SaveStream, object Obj)
{
XDocument XDoc = new XDocument(new XElement(@"SaveData", new XAttribute(@"Version", @"1.0"),
GetXMLElement(Obj)));
XDoc.Save(SaveStream);
}
public object Deserialise(Stream ObjectStream)
{
XDocument XDoc = XDocument.Load(ObjectStream); // Error line
switch (XDoc.Element(@"SaveData").Attribute(@"Version").Value)
{
case @"1.0":
return GetObject(XDoc.Element(@"SaveData").FirstNode as XElement);
default:
throw new NotSupportedException("This save file version (" + XDoc.Element(@"SaveData").Attribute(@"Version").Value +
" is not supported, please upgrade your game.");
}
}
为了保存元数据和实际数据,我只是在同一个流上调用了两次序列化。
我得到一个文件如下:
<?xml version="1.0" encoding="utf-8"?>
<SaveData Version="1.0">
....
</SaveData><?xml version="1.0" encoding="utf-8"?>
<SaveData Version="1.0">
....
</SaveData>
当我尝试阅读第一个 XDoc 时,问题就来了:Unexpected XML declaration. The XML declaration must be the first node in the document, and no white space characters are allowed to appear before it. Line 18, position 14.
任何帮助将不胜感激。