Поэтому у меня возникли проблемы с десериализацией XML-файла.
Я использую следующую структуру.
[Serializable]
public struct GraphicsOptions
{
public int Height;
public int Width;
public bool Fullscreen;
public bool AntiAliasing;
public int ClickResCount;
}
И следующий код для создания,
public void CreateData()
{
graphicsOptions.Height = graphics.PreferredBackBufferHeight;
graphicsOptions.Width = graphics.PreferredBackBufferWidth;
graphicsOptions.Fullscreen = graphics.IsFullScreen;
graphicsOptions.AntiAliasing = graphics.PreferMultiSampling;
graphicsOptions.ClickResCount = 1;
dataStream = File.Create(SavegamePath);
XmlSerializer serializer = new XmlSerializer(typeof(GraphicsOptions));
serializer.Serialize(dataStream, graphicsOptions);
dataStream.Close();
}
Изменить и
private void ApplyChanges()
{
graphicsOptions.Height = graphics.PreferredBackBufferHeight;
graphicsOptions.Width = graphics.PreferredBackBufferWidth;
graphicsOptions.Fullscreen = graphics.IsFullScreen;
graphicsOptions.AntiAliasing = graphics.PreferMultiSampling;
graphicsOptions.ClickResCount = clickCountResolution;
dataStream = File.Open(SavegamePath, FileMode.Open);
XmlSerializer serializer = new XmlSerializer(typeof(GraphicsOptions));
serializer.Serialize(dataStream, graphicsOptions);
dataStream.Close();
}
Загрузите XML-файл
public void LoadData()
{
dataStream = File.Open(SavegamePath, FileMode.Open);
XmlSerializer serializer = new XmlSerializer(typeof(GraphicsOptions));
graphicsOptions = (GraphicsOptions)serializer.Deserialize(dataStream);
dataStream.Close();
}
Довольно стандартные вещи, за исключением того, что после третьего применения изменений он решает добавить 2 символа в конец файла: "s>"
.
Я понятия не имею, почему это происходит, но это делает XML практически бесполезным, потому что я не могу загрузить информацию в свою структуру.
Visual Studio выдает мне InvalidOperationException strong> (я понимаю, почему он это делает).
Любые советы или идеи о том, как предотвратить это или как просто удалить 2 символа, если он поймает исключение?