我有以下课程:
[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
Run Code Online (Sandbox Code Playgroud)
我试图用以下代码保存它:
// 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 ( );
}
Run Code Online (Sandbox Code Playgroud)
每次加载应用程序时,Properties.Settings.Default.MainHeadlineTextData仍为null.保存似乎没有生效.我在另一篇文章中读到该课程必须是公开的.任何想法为什么这将无法正常工作?
Kon*_*rin 10
它不起作用,因为颜色和字体不是xml可序列化的.更重要的是,Font没有无参数构造函数,因此Settings.Save()无法序列化您的对象,也不会保存任何内容.
不幸的是,默认情况下,类SettingsBase下的基础结构(继承您的Settings类 - 请参阅Settings.Designer.cs文件中的自动生成的代码)不会在序列化错误上引发异常,因此您无法看到问题.
从班级中删除字体和颜色属性,然后重试.
另一种解决方案是使用二进制序列化.打开Settings.Designer.cs文件,将属性[SettingsSerializeAs(SettingsSerializeAs.Binary)]添加到属性Settings.MainHeadlineTextData.
| 归档时间: |
|
| 查看次数: |
8096 次 |
| 最近记录: |