我有一个“选项”对象,我正在尝试将其保存到 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
包含(除其他事项外) 一个结构值
public class MyOptions
{
private MyStruct _myStruct;
public MyOptions()
{
_myStruct = someDefaultValue;
}
// etc.
}
MyStruct
只包含一个整数:
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
(我不应该这样做),但都没有帮助.我错过了什么?
最佳答案
设置被序列化为 XML,它有一个 limitation排除 readonly
成员。
删除 readonly
限定符应该可以解决这个问题:
public struct MyStruct {
internal int _someValue;
public MyStruct(int someValue) {
_someValue = someValue;
}
}
关于c# - 为什么我不能序列化其中包含结构的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41351843/