我有一个“选项”对象,我正试图保存到Settings
public class MainWindow
{
public MyOptions MyOptions => (MyOptions)DataContext;
public MainWindow()
{
InitializeComponent();
DataContext = Settings.Default.MyOptions ?? new MyOptions();
}
private void OnOptionsChanged(object sender, PropertyChangedEventArgs e)
{
Settings.Default.MyOptions = MyOptions;
Settings.Default.Save();
}
// etc.
}
MyOptions
包含(除其他外)一个struct-value
public class MyOptions
{
private MyStruct _myStruct;
public MyOptions()
{
_myStruct = someDefaultValue;
}
// etc.
}
MyStruct
只包含一个int:
public struct MyStruct
{
private readonly int _someValue;
public MyStruct(int someValue)
{
_someValue = someValue;
}
// etc.
}
当我拨打Settings.Default.MyOptions = MyOptions;
时,所有值都已正确设置,包括myStruct
。
但是,当我重新启动程序并使用DataContext = Settings.Default.MyOptions
加载选项时,所有值都正确加载,但_myStruct除外,默认为0 !
根据我读过的所有内容,此代码应该可行。我已经尝试将[Serializable]
属性添加到类/结构中,以及实现ISerializable
(我不应该这样做),但都没有帮助。我错过了什么?
答案 0 :(得分:2)
设置被序列化为XML,其中limitation个readonly
成员被排除在外。
删除readonly
限定符应解决此问题:
public struct MyStruct {
internal int _someValue;
public MyStruct(int someValue) {
_someValue = someValue;
}
}
答案 1 :(得分:1)
尝试这个结构,在我的测试用例中它以正确的方式序列化:
public struct MyStruct
{
public int SomeValue { get; set; }
}