Так что у меня проблемы с десериализацией файла XML.
Я использую следующую структуру.Поведение Strange XmlSerializer
[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 практически бесполезным, потому что я не могу загрузить эту информацию в свою struct.
Visual Studio дает мне InvalidOperationException (я понимаю, почему он это делает).
Любые советы или идеи о том, как предотвратить это из-за происходящего или как просто удалить 2 символа, если он поймает исключение?
Это действительно помогло бы, если бы вы только дайте нам короткую, но полную программу, демонстрирующую проблему - что нужно только сохранить файл, на самом деле. –
Я дал слишком много информации или недостаточно? рассматриваемая программа выполняется с помощью инфраструктуры XNA, я могу добавить логику обновления, но она не даст вам больше информации. – Matonster
Смесь - слишком много (то есть некоторые посторонние вещи) и недостаточно (не краткая, но полная программа, демонстрирующая проблема). XNA * вероятно * нерелевантно - но было бы легко сказать, просто ли вы создадите короткое консольное приложение (а не фрагменты, а всего целую программу), что указывает на проблему. –