I have the following class:
[Serializable]
[XmlRoot ( ElementName = "TextData", IsNullable = false)]
public class TextData
{
private System.Drawing.Font fontColor;
[XmlAttribute ( AttributeName = "Font" )]
public System.Drawing.Font Font { get; set; }
[XmlAttribute ( AttributeName = "FontColor" )]
public System.Drawing.Color FontColor { get; set; }
[XmlAttribute ( AttributeName = "Text" )]
public string Text { get; set; }
public TextData ( )
{
} // End of TextData
} // End of TextData
And Im attempting to save it with the following code:
// Create our font dialog
FontDialog fontDialog = new FontDialog ( );
fontDialog.ShowColor = true;
// Display the dialog and check for an ok
if ( DialogResult.OK == fontDialog.ShowDialog ( ) )
{
// Save our changes for the font settings
if ( null == Properties.Settings.Default.MainHeadlineTextData )
{
Properties.Settings.Default.MainHeadlineTextData = new TextData ( );
}
Properties.Settings.Default.MainHeadlineTextData.Font = fontDialog.Font;
Properties.Settings.Default.MainHeadlineTextData.FontColor = fontDialog.Color;
Properties.Settings.Default.Save ( );
}
Everytime I load the the application, the Properties.Settings.Default.MainHeadlineTextData is still null. Saving does not seem to take effect. I read on another post that the class must be public and it is. Any ideas why this would not be working properly?
It doesn't work because Color and Font are not xml-serializable. Even more than that, Font does not have parameterless constructor so Settings.Save() fails to serialize your object and doesn't save anything.
Unfortunately, by default infrastructure under class SettingsBase (from which your Settings class is inherited - see auto-generated code in Settings.Designer.cs file) doesn't throw exception on serialization error so you can't see the problem.
Remove Font and Color properties from your class and try again.
Another solution is to use binary serialization. Open Settings.Designer.cs file and add attribute [SettingsSerializeAs(SettingsSerializeAs.Binary)] to the property Settings.MainHeadlineTextData.
To save classes to the application settings config file, the class must either support a TypeConverter or be XMLSerializable.
Your code does not implement a TypeConverter for your custom class, and the Color and Font classes are not XMLSerialiable.
How to implement a type converter: http://msdn.microsoft.com/en-us/library/ayybcxe5%28VS.80%29.aspx
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With