Ошибки при сериализации - C#
Формулировка задачи:
Всем привет есть такая проблема, пытаюсь сериализовать объекты, но вылезает ошибка.
объект:
метод сериализации:
вот такая вот ошибка вылазиет
думал ошибка связанна с билдером, но наврядли, и на всякий случай поставил атрибут сериализации
эта бинарная сериализация, при xml сериализации выдает другую ошибку
[Serializable]
public abstract class ISetting
{
[DisplayName("Имя вкладки")]
public string Name { get; set; }
public abstract Type GetType();
}
[Serializable]
public class Common : ISetting
{
[DisplayName("Имя вкладки")]
public string Name { get; set; }
[DisplayName("Ручное управуление")]
public bool Manual { get; set; }
[DisplayName("Время ожидания между вкл/выкл коннекторов")]
public TimeProperty TimeProperty { get; set; }
public Common()
{
}
public Common(string name, TimeProperty timeProperty)
{
Name = name;
TimeProperty = timeProperty;
}
public override Type GetType()
{
return typeof (Common);
}
}
[Serializable]
public class FirstTest : ISetting
{
public string Name { get; set; }
public int NumberLoads { get; set; }
public TimeProperty[] TimeProperty { get; set; }
public FirstTest(string name, int number, params TimeProperty[] property)
{
Name = name;
NumberLoads = number;
TimeProperty = property;
}
public override Type GetType()
{
return typeof(FirstTest);
}
}public class FileWRHelper
{
public static void WriteCongif(List<ISetting> list)
{
try
{
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream fs = new FileStream("config.tfc", FileMode.OpenOrCreate))
{
formatter.Serialize(fs, list);
}
}
catch (SerializationException ex)
{
}
}
public static List<ISetting> ReadConfig()
{
List<ISetting> list = new List<ISetting>();
try
{
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream fs = new FileStream("config.tfc", FileMode.OpenOrCreate))
{
list = (List<ISetting>)formatter.Deserialize(fs);
}
}
catch (SerializationException ex)
{
//list = null;
}
return list;
}
}Тип "FieldTest.Builder.CommonBuilder`1+<>c__DisplayClass1_0[[FieldTest.Builder.Factory.ISetting, FieldTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" в сборке "FieldTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" не помечен как сериализуемый.
[Serializable]
public abstract class SettingBuilder<T> : ContentControl where T : ISetting
{
public delegate void SettingBuilderHadler(bool state);
public event SettingBuilderHadler Changed;
public ISetting Builder { get; set; }
public Type Type { get; protected set; }
public abstract Panel GetControl();
protected Panel Panel { get; set; }
protected Load NumLoads { get; set; }
public bool IsCahnge
{
get
{
return _isChange;
}
set
{
_isChange = value;
Changed(IsCahnge);
}
}
protected bool _isChange = false;
protected void InitPanel()
{
Panel = new StackPanel();
Panel.HorizontalAlignment = HorizontalAlignment.Left;
Panel.VerticalAlignment = VerticalAlignment.Top;
Panel.FlowDirection = FlowDirection.LeftToRight;
}
protected void InitLoads()
{
NumLoads = new Load();
NumLoads.HorizontalAlignment = HorizontalAlignment.Left;
}
}
[Serializable]
public class CommonBuilder<T> : SettingBuilder<T> where T: ISetting
{
public CommonBuilder(T type)
{
Builder = (ISetting)type;
}
public override Panel GetControl()
{
InitPanel();
CheckBox manual = new CheckBox();
manual.IsChecked = ((Common)Builder).Manual;
manual.Content = "Ручное управление";
manual.Checked += (args, e) => { ((Common)Builder).Manual = (bool)manual.IsChecked; };
Time time = new Time(((Common)Builder).TimeProperty);
time.TimeProperty.Changed += (i, tp) => { ((Common)Builder).TimeProperty = time.TimeProperty;
IsCahnge = true;
};
Panel.Children.Add(manual);
Panel.Children.Add(time);
return Panel;
}
}
[Serializable]
public class FirstTestBuilder<T> : SettingBuilder<T> where T : ISetting
{
public FirstTestBuilder(T type)
{
InitPanel();
InitLoads();
Panel.Children.Add(NumLoads);
NumLoads.comboBox.SelectionChanged += (args, e) =>
{
((FirstTest) Builder).NumberLoads = NumLoads.NumLoads;
};
Builder = (ISetting) type;
for (int i = 0; i < ((FirstTest) Builder).TimeProperty.Length; i++)
{
Time time = new Time(((FirstTest)Builder).TimeProperty[i]);
//time.TimeProperty.Changed += () => { ((FirstTest)Builder).TimeProperty[i] = time.TimeProperty; };
time.TimeProperty.Changed += TimeProperty_Changed;
time.TimeProperty.Index = i;
Panel.Children.Add(time);
}
this.Content = Panel;
}
private void TimeProperty_Changed(int i, TimeProperty tp)
{
IsCahnge = true;
((FirstTest) Builder).TimeProperty[i] = tp;
}
public override Panel GetControl()
{
return Panel;
}
}Решение задачи: «Ошибки при сериализации»
textual
Листинг программы
.method public hidebysig static void Run() cil managed
{
// Размер кода: 29 (0x1d)
.maxstack 2
.locals init ([0] class ThirtyNineEighty.ComTest/'<>c__DisplayClass0_0' 'CS$<>8__locals0',
[1] class [mscorlib]System.Action action)
IL_0000: newobj instance void ThirtyNineEighty.ComTest/'<>c__DisplayClass0_0'::.ctor()
IL_0005: stloc.0
IL_0006: nop
IL_0007: ldloc.0
IL_0008: ldc.i4.s 20
// Вот здесь твой c__DisplayClass0_0
IL_000a: stfld int32 ThirtyNineEigDisplayClass0hty.ComTest/'<>c__DisplayClass0_0'::param
IL_000f: ldloc.0
IL_0010: ldftn instance void ThirtyNineEighty.ComTest/'<>c__DisplayClass0_0'::'<Run>b__0'()
IL_0016: newobj instance void [mscorlib]System.Action::.ctor(object,
native int)
IL_001b: stloc.1
IL_001c: ret
} // end of method ComTest::Run