У меня есть 2 XDocuments.Один - это некоторые метаданные, другой - много данных.
На Xbox (XNA) я хотел бы иметь возможность сохранять как в файловый поток, сначала метаданные XDoc, а затем фактическиеdata 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.
Любая помощь будет принята с благодарностью.