【发布时间】:2011-05-16 12:10:57
【问题描述】:
我有 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.
任何帮助将不胜感激。
【问题讨论】:
-
XDocument.Load(ObjectStream)已经返回了一个 XDocument 对象,不需要实例化一个new XDocument。
标签: c# xml stream linq-to-xml xbox360