我有一个要保存到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(我不必这样做),但是都没有帮助。我想念什么?

最佳答案

试试这个结构,在我的测试案例中,它以正确的方式序列化:

public struct MyStruct
{
    public int SomeValue { get; set; }
}

10-07 15:49