Skipping Invalid Values On Deserialize



Question


Is it possible to skip invalid values up on de-serialization? For example if a user inserted a invalid value inside the xml file.


Class Definition



using Relink.Data.Enum;
using System;
using System.IO;
using System.Xml.Serialization;
using System.ComponentModel;

namespace Relink {

[Serializable]
public class Settings {

internal static XmlSerializer Serializer = new XmlSerializer(typeof(Settings));

public Difficulty Difficulty {
get;
set;
}

public Boolean CaptureMouse {
get;
set;
}

internal void loadDefaults() {
this.Difficulty = Difficulty.Normal;
this.CaptureMouse = false;
}

}

}


Serialization Method



// ...
if(!File.Exists(GameDir + SettingsFile)) {
Settings = new Settings();
Settings.loadDefaults();
TextWriter writer = new StreamWriter(GameDir + SettingsFile);
Settings.Serializer.Serialize(writer, Settings);
writer.Close();
writer.Dispose();
} else {
TextReader reader = new StreamReader(GameDir + SettingsFile);
Settings = (Settings)Settings.Serializer.Deserialize(reader);
}
// ...


XML Content (valid)



<?xml version="1.0" encoding="utf-8"?>
<Settings xmlns:xsi="http://ift.tt/ra1lAU" xmlns:xsd="http://ift.tt/tphNwY">
<Difficulty>Normal</Difficulty>
<CaptureMouse>false</CaptureMouse>
</Settings>


XML Content (invalid)



<?xml version="1.0" encoding="utf-8"?>
<Settings xmlns:xsi="http://ift.tt/ra1lAU" xmlns:xsd="http://ift.tt/tphNwY">
<Difficulty>Moo</Difficulty>
<CaptureMouse>false</CaptureMouse>
</Settings>


Remarks


I don't want to "reset" the users settings, i just want to skip the invalid stuff and use default values instead. Otherwise i would you a try/catch construct and just re-generate the xml file.


No comments:

Post a Comment