У меня есть DataGrid, который содержит параметры конфигурации для робота, над которым я работаю.Я пытаюсь добавить функциональность для импорта / экспорта наборов параметров, и я пытаюсь сделать это с помощью XML-сериализации.
Я новичок в сериализации XML, и все еще довольно новичок в C #, поэтому я не знаю, где я ошибаюсь.
Я создал класс, показанный ниже, для хранения значений из сетки данных.Я не мог использовать тот же тип, который заполняет сетку данных, так как в этом классе так много разрозненной логики и мусора, что сериализация никогда не будет работать.
[Serializable]
public class CmcdSerializationBuffer
{
[XmlElement]
public string Name { get; set; }
[XmlElement]
public string TypeAssemblyQualifiedName { get; set; }
private string _storedValue;
[XmlElement]
public string StoredValue
{
get { return _storedValue; }
set { _storedValue = value; }
}
private string _temporaryValueFromUser;
public string TemporaryValueFromUser
{
get { return _temporaryValueFromUser; }
set { _temporaryValueFromUser = value; }
}
[XmlElement]
public string DefaultValue { get; set; }
public CmcdSerializationBuffer()
{
}
public CmcdSerializationBuffer(CmcdConfigurationParameter parameter)
{
Name = parameter.Name;
TypeAssemblyQualifiedName = parameter.TypeAssemblyQualifiedName;
StoredValue = parameter.StoredValue;
TemporaryValueFromUser = parameter.TemporaryValueFromUser;
DefaultValue = parameter.DefaultValue;
}
}
Так что я сделал этот класс, чтобы обойти это, он просто принимает CmcdConfigurationParameter
(тип, заполняющий DataGrid) и копирует значения.
Это, кстати, сериализуется правильно.
Я хочу экспортировать несколько из них в один файл, поэтому я решил создать собственный класс коллекции, содержащий объекты CmcdSerializatinonBuffer
.Вот что у меня есть:
[Serializable]
public class ValuesToExport
{
[XmlArray("ParamsList")]
public List<CmcdSerializationBuffer> Parameters { get; set; }
public ValuesToExport()
{
Parameters = new List<CmcdSerializationBuffer>();
}
public ValuesToExport(List<CmcdSerializationBuffer> parameters)
{
Parameters = new List<CmcdSerializationBuffer>();
Parameters = parameters;
}
}
А вот функция, которую я использую для экспорта значений:
public void Export()
{
ValuesToExport val = new ValuesToExport();
CmcdSerializationBuffer tempBuffer = new CmcdSerializationBuffer();
foreach (CmcdConfigurationParameter param in MasterDataGrid.ItemsSource)
{
tempBuffer = new CmcdSerializationBuffer(param);
val.Parameters.Add(tempBuffer);
Console.WriteLine(val.Parameters.Count());
}
MessageBox.Show(MasterDataGrid.ItemsSource.GetType().ToString());
//ValuesToExport val = new ValuesToExport(MasterDataGrid.ItemsSource);
XmlSerializer serialiser = new XmlSerializer(typeof(ValuesToExport));
using (FileStream fs = new FileStream("D:\\test\\testserialization.txt", FileMode.OpenOrCreate))
using (TextWriter writer = new StreamWriter(fs))
{
serialiser.Serialize(writer, val.Parameters);
Console.WriteLine(val.Parameters);
writer.Close();
}
}
Я не знаю, является ли это правильным способом сделать это, но это работает для одного параметра.Однако, когда я пытаюсь сериализовать свой ValuesToExport
класс, я получаю сообщение об ошибке:
"Невозможно привести объект типа" System.Collections.Generic.List`1 [Hamilton.HST.MotionController.DeviceConfiguration.CmcdSerializationBuffer] 'для ввода' Hamilton.HST.MotionController.DeviceUI.ValuesToExport '. "
И я не смог это исправить.Если кто-нибудь знает, как я могу это исправить, я хотел бы знать.Спасибо!