自定义类型未保存在应用程序设置中
Custom type not saving in application settings
我有 class CaptureResolution
表示相机捕获的分辨率:
[Serializable]
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
[XmlRoot (ElementName = "CaptureResolution", IsNullable = false)]
public class CaptureResolution: ApplicationSettingsBase
{
[UserScopedSetting]
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
[XmlAttribute (AttributeName = "Width")]
public int Width { get; set; }
[UserScopedSetting]
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
[XmlAttribute(AttributeName = "Height")]
public int Height { get; set; }
public CaptureResolution(int width, int height)
{
Width = width;
Height = height;
}
public CaptureResolution(): this(1024, 720)
{
}
}
我在给定类型的设置设计器中添加了一个设置:
但是当调用这个
Properties.Settings.Default.ResolutionSelection = new CaptureResolution(1920, 1080);
Properties.Settings.Default.Save();
设置未保存在用户设置文件中:
<setting name="ResolutionSelection" serializeAs="Xml">
<value />
</setting>
我可以肯定地验证该值已分配给设置的 属性。否则程序根本无法运行。我还查看了调试器。
此外,我已经在互联网上搜索了合适的解决方案,但最终并没有真正帮助。其他设置保存没有任何问题。
据我所知,设置设计器需要一个可以序列化为 XML 的 class 和一个 public 可访问的默认无参数构造函数。我都做了,所以我想知道为什么它没有按预期工作。
补充问题
如何为该自定义类型设置分配默认值?
输入 new FaceDetection.Model.CaptureResolution()
以异常结束。
您正在从 ApplicationSettingsBase
导出 CaptureResolution
:
public class CaptureResolution: ApplicationSettingsBase
不要那样做。没有必要,而且这样做显然不行。
默认值
如果您单击其顶部的 "View Code" 按钮,设置设计器将创建一个 Settings.cs
。在这个 Settings.cs
文件中,您可以添加自己的代码,也可以手动创建应用程序设置,例如类似的东西:
[UserScopedSetting]
public CaptureResolution ResolutionSelection
{
get
{
var value = (CaptureResolution)this[nameof(ResolutionSelection)];
if (value == null)
{
value = new CaptureResolution(1, 2); // decent default value
this[nameof(ResolutionSelection)] = value;
}
return value;
}
set { this[nameof(ResolutionSelection)] = value; }
}
如果设置为空,这将创建一个默认值。您将必须删除使用设计器创建的设置。
我有 class CaptureResolution
表示相机捕获的分辨率:
[Serializable]
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
[XmlRoot (ElementName = "CaptureResolution", IsNullable = false)]
public class CaptureResolution: ApplicationSettingsBase
{
[UserScopedSetting]
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
[XmlAttribute (AttributeName = "Width")]
public int Width { get; set; }
[UserScopedSetting]
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
[XmlAttribute(AttributeName = "Height")]
public int Height { get; set; }
public CaptureResolution(int width, int height)
{
Width = width;
Height = height;
}
public CaptureResolution(): this(1024, 720)
{
}
}
我在给定类型的设置设计器中添加了一个设置:
但是当调用这个
Properties.Settings.Default.ResolutionSelection = new CaptureResolution(1920, 1080);
Properties.Settings.Default.Save();
设置未保存在用户设置文件中:
<setting name="ResolutionSelection" serializeAs="Xml">
<value />
</setting>
我可以肯定地验证该值已分配给设置的 属性。否则程序根本无法运行。我还查看了调试器。
此外,我已经在互联网上搜索了合适的解决方案,但最终并没有真正帮助。其他设置保存没有任何问题。
据我所知,设置设计器需要一个可以序列化为 XML 的 class 和一个 public 可访问的默认无参数构造函数。我都做了,所以我想知道为什么它没有按预期工作。
补充问题
如何为该自定义类型设置分配默认值?
输入 new FaceDetection.Model.CaptureResolution()
以异常结束。
您正在从 ApplicationSettingsBase
导出 CaptureResolution
:
public class CaptureResolution: ApplicationSettingsBase
不要那样做。没有必要,而且这样做显然不行。
默认值
如果您单击其顶部的 "View Code" 按钮,设置设计器将创建一个 Settings.cs
。在这个 Settings.cs
文件中,您可以添加自己的代码,也可以手动创建应用程序设置,例如类似的东西:
[UserScopedSetting]
public CaptureResolution ResolutionSelection
{
get
{
var value = (CaptureResolution)this[nameof(ResolutionSelection)];
if (value == null)
{
value = new CaptureResolution(1, 2); // decent default value
this[nameof(ResolutionSelection)] = value;
}
return value;
}
set { this[nameof(ResolutionSelection)] = value; }
}
如果设置为空,这将创建一个默认值。您将必须删除使用设计器创建的设置。