C# 序列化自定义集合时遇到问题

C# 序列化自定义集合时遇到问题,c#,wpf,collections,xml-serialization,C#,Wpf,Collections,Xml Serialization,我有一个数据网格,它保存我正在工作的机器人的配置参数。我正在尝试添加导入/导出参数集的功能,并尝试通过XML序列化来实现这一点 我是XML序列化的完全新手,而且对C#还是相当陌生的,所以我不知道哪里出了问题 我创建了一个类,如下所示,用于保存数据网格中的值。我不能使用填充datagrid的同一类型,因为该类中有太多断开连接的逻辑和垃圾,所以序列化永远不会工作 [Serializable] public class CmcdSerializationBuffer { [XmlElement

我有一个数据网格,它保存我正在工作的机器人的配置参数。我正在尝试添加导入/导出参数集的功能,并尝试通过XML序列化来实现这一点

我是XML序列化的完全新手,而且对C#还是相当陌生的,所以我不知道哪里出了问题

我创建了一个类,如下所示,用于保存数据网格中的值。我不能使用填充datagrid的同一类型,因为该类中有太多断开连接的逻辑和垃圾,所以序列化永远不会工作

[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);