I have a class which stores my camera settings
public class SaveData
{
public CameraFreeLookSettings CameraSettings;
/// <summary>
/// Parameterless constructor for XML Serialization/Deserialization
/// </summary>
private SaveData() { }
public SaveData(CameraFreeLookSettings cameraSettings)
{
CameraSettings = cameraSettings;
}
}
I'm trying to save those settings using a SaveFileDialog and XmlWriter
SaveData saveData = new SaveData(
game.ActiveCamera.Write() as CameraFreeLookSettings
);
Stream stream = null;
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.AddExtension = true;
saveFileDialog.CheckFileExists = false;
saveFileDialog.CheckPathExists = true;
saveFileDialog.InitialDirectory = "\\";
saveFileDialog.Filter = "XML files (*.xml)|*.xml";
saveFileDialog.FilterIndex = 2;
saveFileDialog.RestoreDirectory = true;
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
if ((stream = saveFileDialog.OpenFile()) != null)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.ConformanceLevel = ConformanceLevel.Auto;
settings.Encoding = System.Text.Encoding.UTF8;
settings.Indent = true;
//settings.OmitXmlDeclaration = true;
using (XmlWriter xmlWriter = XmlWriter.Create(stream, settings))
{
XmlSerializer serializer = new XmlSerializer(typeof(SaveData)); // Can this stored elsewhere?
serializer.Serialize(xmlWriter, saveData);
//xmlWriter.Close();
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error: Could not save file to the disk. Original error: " + ex.Message);
}
}
This produces what looks like a perfectly normal .XML file
<?xml version="1.0" encoding="utf-8"?>
<SaveData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CameraSettings>
<FarClip>1100</FarClip>
<IsIgnoreInput>true</IsIgnoreInput>
<NearClip>0.1</NearClip>
<Orientation>
<X>0.225798175</X>
<Y>-0.00510073872</Y>
<Z>-0.00118228782</Z>
<W>0.9741601</W>
</Orientation>
<Position>
<X>0</X>
<Y>0</Y>
<Z>20</Z>
</Position>
<Sensitivity>0.3</Sensitivity>
</CameraSettings>
</SaveData>
When I try loading the .XML file using OpenFileDialog and XmlReader
Stream stream = null;
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.CheckFileExists = true;
openFileDialog.CheckPathExists = true;
openFileDialog.InitialDirectory = "\\"; //@"C:\"
openFileDialog.Filter = "XML files (*.xml)|*.xml";
openFileDialog.FilterIndex = 2;
openFileDialog.RestoreDirectory = true;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
if ((stream = openFileDialog.OpenFile()) != null)
{
// XML READER is only used here, replace it with StreamReader if required
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;
using (XmlReader reader = XmlReader.Create(stream, settings))
{
// No object should be selected when loading a new level
objectSelected = null;
XmlSerializer serializer = new XmlSerializer(typeof(SaveData)); // Can this stored elsewhere?
bool pants = serializer.CanDeserialize(reader);
SaveData saveData = serializer.Deserialize(stream) as SaveData;
// Camera
game.ActiveCamera.Read(saveData.CameraSettings);
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
}
}
I get the following error message
There is an error in XML document (0, 0)
Please can someone explain why this is happening?