【问题标题】:XML Serialization and List<enum> c#XML 序列化和 List<enum> c#
【发布时间】:2011-04-26 18:58:16
【问题描述】:

当我收到以下 错误

'GameDataBuilder.vshost.exe' (Managed): Loaded 'uoqssn9i'
A first chance exception of type 'System.NullReferenceException' occurred in uoqssn9i
A first chance exception of type 'System.TypeInitializationException' occurred in uoqssn9i
A first chance exception of type 'System.InvalidOperationException' occurred in System.Xml.dll
An unhandled exception of type 'System.InvalidOperationException' occurred in System.Xml.dll

我查看了List&lt;&gt; 的内部,所有值都是有效的。使用相同的代码,我可以序列化枚举(不是列表)和所有其他类型(int、float 等)以及其他类型的列表。似乎枚举列表会导致错误。

以前有人遇到过这个问题吗?

任何帮助将不胜感激

编辑

序列化方法:

public void SerialiseToXML(XmlSerializer serializer, string directory)
{

    string fileName = directory + m_Name + ".xml";

    if (!Directory.Exists(directory))
    {
        DirectoryInfo di = Directory.CreateDirectory(directory);
    }

    if (!File.Exists(fileName))
    {
        using(File.Create(fileName))
        {
        }
    }

    using (TextWriter textWriter = new StreamWriter(fileName))
    {
        serializer.Serialize(textWriter, m_Objects);
    }
}

序列化器:

private void GenerateSerializer()
{
    List<Type> dynamiclyCreatedTypes = mTypeManager.GetSerializeableTypes();
    m_Serializer = new XmlSerializer(typeof(List<ISerializeable>), dynamiclyCreatedTypes.ToArray());
}

列表是这样生成的:

type = typeof(List<>).MakeGenericType(type);

【问题讨论】:

  • 你能把你用来序列化的sn-p贴出来吗?
  • 其实你传入的XmlSerializer是怎么创建的。
  • 有问题的枚举是在运行时使用反射生成的,尽管它不在列表中时可以很好地序列化
  • ISerializable 接口与 XML 序列化没有任何关系,因此序列化 ISerializable 对象列表没有意义...
  • 请将“GenerateSerializer”方法添加到您的问题中。

标签: c# xml list serialization enums


【解决方案1】:

我认为问题在于您使用typeof(List&lt;ISerializeable&gt;) 创建 XmlSerializer。序列化器不能对接口起作用,你需要为它们提供一个具体的类型。

你能用这个typeof(List&lt;EnumType&gt;) 代替吗?

【讨论】:

  • 枚举属于额外类型(dynamicallyCreatedTypes),序列化器也在序列化许多其他类型,所以 typeof(List) 并不理想,但我会尝试见
  • 澄清一下,枚举列表(以及所有其他要输出的类型)都在一个 ISerializeable 的子类中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多