c# - 为什么我不能序列化其中包含结构的对象?

标签 c# wpf

我有一个“选项”对象,我正在尝试将其保存到 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/

相关文章:

c# - 在没有集成服务的情况下从文本文件批量插入到 sql server 的最快方法

c# - 无需键入其字符串目录即可访问资源文件的 URL

c# - 对于新手,首先开发的最佳 Web 应用程序是什么?

c# - 如何在wpf中使按钮和背景闪烁

c# - 当在表单上的某处单击按钮时,wpf 编辑列表框中的项目

c# - 在 WPF 中限制 "Auto"和 "1*"上的行高

c# - 如何在 WPF 中调试绑定(bind)

c# - visual studio中tab的逆向效果

c# - 使用未给出预期值的标志属性解析枚举

c# - GMap.Net Wpf 中的叠加层