C# 如何使用设置在自定义类中保存多维数组

C# 如何使用设置在自定义类中保存多维数组,c#,class,serialization,save,settings,C#,Class,Serialization,Save,Settings,我有一个类,我希望将其实例保存在我的设置文件中。我无法使用常规的properties.settings.default.save命令保存该类。不会出现错误,但在运行之间设置不会持久,我理解这是序列化的问题 我已经将问题精确定位到一个特定的行,一个公共多维点数组。如果我将2d数组更改为1d数组,它可以正常工作,但我的应用程序首选2d数组。由于我还在学习,我想知道为什么会发生这种情况 我的问题是,为什么2d阵列不保存到设置中?这是序列化的问题吗?我如何才能正确地实现这一点 public class

我有一个类,我希望将其实例保存在我的设置文件中。我无法使用常规的properties.settings.default.save命令保存该类。不会出现错误,但在运行之间设置不会持久,我理解这是序列化的问题

我已经将问题精确定位到一个特定的行,一个公共多维点数组。如果我将2d数组更改为1d数组,它可以正常工作,但我的应用程序首选2d数组。由于我还在学习,我想知道为什么会发生这种情况

我的问题是,为什么2d阵列不保存到设置中?这是序列化的问题吗?我如何才能正确地实现这一点

public class AsmbLine 
{

    public int linenumber { get; set; }
    public Ticket[] ticketlist { get; set; }
    public string[] platesizes { get; set; }
    public string[] platetypes { get; set; }
    public string[] platecounts { get; set; }
    public int[,] cellidsallowed { get; set; } // This Line is the problem

    //public int[] cellidsallowed { get; set; } //uncomment these two lines to fix
    //public int[] cellidsallowedtypes { get; set; } // uncomment these two lines to fix
干杯

**编辑**

以下是我访问/保存设置的方式。我发现在使用自定义类时,如果设置是第一次启动时初始化的,那么使用单独的bool标记是最容易的

private void asmbinitializedcheckandload()
    {
            bool temp = false;
            temp = Properties.Settings.Default.Asmbarrayinitialized;
            if (temp == false) // if this is false, then we are running for the first time
            {
                Optimo20.Properties.Settings.Default.alines = new AsmbLine[maxlines]; //create new instance of alines[]

                Properties.Settings.Default.Save(); // save

                for (int i = 0; i < Properties.Settings.Default.alines.Length; i++)
                {
                    Optimo20.Properties.Settings.Default.alines[i] = new AsmbLine(); // initialize each member of alines


                }    
                Properties.Settings.Default.Asmbarrayinitialized = true; // set the flag to true, setting is initialized
                Properties.Settings.Default.Save(); // save
             }

        alinearray = Optimo20.Properties.Settings.Default.alines; // load settings data into local array.


    }

当您将代码更改为此..时会发生什么情况。。?这应该可以编译

public class AsmbLine 
{
    public int linenumber { get; set; }
    public Ticket[] ticketlist { get; set; }
    public string[] platesizes { get; set; }
    public string[] platetypes { get; set; }
    public string[] platecounts { get; set; }
    //public int[] cellidsallowed { get; set; } //uncomment these two lines to fix
    private int[,] cellidsallowed;  

    public int[,] Cellidsallowed         
    {   get { return cellidsallowed; } 
        set { cellidsallowed = value; }         
    }
}

因为你正在学习这个网站将是完美的为你如何设置你需要的感谢。Dotnetperls已经是我巨大的帮助来源了!我花了一段时间对所有内容进行注释/取消注释,然后将其切换回原来的状态。不幸的是,它仍然无法正常工作,同样的错误是没有正确保存到设置。根据您发布的内容和我尝试为您简化的内容。。您需要显示更多的代码。。保存设置程序在哪里…?当然可以。在上面添加了更新。我基本上只使用properties.settings.default.save函数。其他设置会被保存,但该设置不会保存,这肯定是因为int[,]的原因。您正在查看哪个文件以查看更改是否已保存您可以发布文件位置吗?我不知道你看的文件是不是错了。我其实不是每次都看文件。当我重新运行程序并尝试加载值时,它只为我保存的类加载null,而bool标志加载true,因为我将其设置为第一次默认值为false。我在这行检查:alinearray=Optimo20。。。。