Сохранение коллекции пользовательских объектов в настройках приложения

Я следил за Проблема с сохранением коллекции объектов в настройках приложения чтобы сохранить мою коллекцию пользовательских объектов ObservableCollection, которая привязана к DataGrid в настройках приложения, но данные не хранятся в user.config, как другие настройки. Может ли кто-нибудь помочь мне с этим? Спасибо!

Мои пользовательские классы:

[Serializable()]
public class ActuatorParameter
{
    public ActuatorParameter()
    {}
    public string caption { get; set; }
    public int value { get; set; }
    public IntRange range { get; set; }
    public int defaultValue { get; set; }
}

и

[Serializable()]
public class IntRange
{
    public int Max { get; set; }
    public int Min { get; set; }

    public IntRange(int min, int max)
    {
        Max = max;
        Min = min;
    }
    public bool isInRange(int value)
    {
        if (value < Min || value > Max)
            return true;
        else
            return false;
    }
}

Заполните коллекцию и сохраните:

Settings.Default.pi_parameters = new ObservableCollection<ActuatorParameter> 
{ 
new ActuatorParameter() { caption = "Velocity", range = new IntRange(1, 100000), defaultValue = 90000},
new ActuatorParameter() { caption = "Acceleration", range = new IntRange(1000, 1200000), defaultValue = 600000},
new ActuatorParameter() { caption = "P-Term", range = new IntRange(150, 350), defaultValue = 320},
new ActuatorParameter() { caption = "I-Term", range = new IntRange(0, 60), defaultValue = 30},
new ActuatorParameter() { caption = "D-Term", range = new IntRange(0, 1200), defaultValue = 500},
new ActuatorParameter() { caption = "I-Limit", range = new IntRange(0, 1000000), defaultValue = 2000}
};
Settings.Default.Save();

Мои пользовательские настройки:

internal sealed partial class Settings
{
    [global::System.Configuration.UserScopedSettingAttribute()]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public ObservableCollection<ActuatorParameter> pi_parameters
    {
        get
        {
            return ((ObservableCollection<ActuatorParameter>)(this["pi_parameters"]));
        }
        set
        {
            this["pi_parameters"] = value;
        }
    }
}

person frsc    schedule 07.05.2013    source источник


Ответы (1)


После долгих исследований я наконец обнаружил, что в классе IntRange отсутствует стандартный конструктор.

[Сериализуемый()]

public class IntRange
{
    public int Max { get; set; }
    public int Min { get; set; }

    public IntRange()
    {}

    public IntRange(int min, int max)
    {
        Max = max;
        Min = min;
    }
   public bool isInRange(int value)
   {
        if (value < Min || value > Max)
            return true;
        else
            return false;
   }
}
person frsc    schedule 08.05.2013