C# 序列化自定义集合时遇到问题
我有一个数据网格,它保存我正在工作的机器人的配置参数。我正在尝试添加导入/导出参数集的功能,并尝试通过XML序列化来实现这一点 我是XML序列化的完全新手,而且对C#还是相当陌生的,所以我不知道哪里出了问题 我创建了一个类,如下所示,用于保存数据网格中的值。我不能使用填充datagrid的同一类型,因为该类中有太多断开连接的逻辑和垃圾,所以序列化永远不会工作C# 序列化自定义集合时遇到问题,c#,wpf,collections,xml-serialization,C#,Wpf,Collections,Xml Serialization,我有一个数据网格,它保存我正在工作的机器人的配置参数。我正在尝试添加导入/导出参数集的功能,并尝试通过XML序列化来实现这一点 我是XML序列化的完全新手,而且对C#还是相当陌生的,所以我不知道哪里出了问题 我创建了一个类,如下所示,用于保存数据网格中的值。我不能使用填充datagrid的同一类型,因为该类中有太多断开连接的逻辑和垃圾,所以序列化永远不会工作 [Serializable] public class CmcdSerializationBuffer { [XmlElement
[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
(填充数据网格的类型)并复制值
顺便说一下,这可以正确地序列化
我想将其中的多个导出到一个文件中,因此我想创建一个自定义集合类,该类包含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;
}
}
我不知道这是否是正确的方法,但它只适用于一个参数。但是,当我尝试将我的值序列化为导出
类时,我会收到一个错误消息:
“无法将类型为'System.Collections.Generic.List`1[Hamilton.HST.MotionController.DeviceConfiguration.CmcdSerializationBuffer]'的对象强制转换为类型为'Hamilton.HST.MotionController.DeviceUI.ValuesToExport'。”
我还没能解决这个问题。如果有人知道我如何解决这个问题,我很想知道。谢谢 之所以出现此错误,是因为您为类型
ValuesToExport
创建了一个XmlSerializer
,但是当您调用.Serialize
方法时,您正在向它传递一个CmcdSerializationBuffer
列表。它不是序列化程序所期望的类型,因此会抛出错误
要修复此问题,可以更改此行:
serialiser.Serialize(writer, val.Parameters);
为此:
serialiser.Serialize(writer, val);
感觉我的问题总是这么简单地解决了。哦,好吧,我得想办法学!感谢您的修复和解释!
serialiser.Serialize(writer, val);