C# xml列表反序列化只接受一个元素

C# xml列表反序列化只接受一个元素,c#,xml,list,serialization,C#,Xml,List,Serialization,我正在从此xml文件加载不同类型的路径: <?xml version="1.0" encoding="utf-8" ?> <SplashScreen> <Image> <Path>Visual/Screens/SplashScreen/samurai1024-768</Path> <Path>Visual/Screens/SplashScreen/Humanoid1024-768</Path>

我正在从此xml文件加载不同类型的路径:

<?xml version="1.0" encoding="utf-8" ?>
<SplashScreen>
  <Image>
    <Path>Visual/Screens/SplashScreen/samurai1024-768</Path>
    <Path>Visual/Screens/SplashScreen/Humanoid1024-768</Path>
  </Image>
  <Song>
    <Path>Audio/SplashScreen/wardrums</Path>
  </Song>
</SplashScreen>

视觉/屏幕/飞溅屏幕/武士1024-768
视觉/屏幕/飞溅屏幕/仿人1024-768
音频/溅屏/衣柜
这是我用来序列化和反序列化的XmlManager类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using System.IO;

namespace Lucid.Classes
{
    public class XmlManager<T>
    {
        public Type Type;

        public T Load(string P_path)
        {
            T instance;
            using (TextReader reader = new StreamReader(P_path))
            {
                XmlSerializer xmlSerializer = new XmlSerializer(Type);
                instance = (T)xmlSerializer.Deserialize(reader);
            }
            return instance;
        }

        public void Save(string P_path, object P_obj)
        {
            using (TextWriter writer = new StreamWriter(P_path))
            {
                XmlSerializer xmlSerializer = new XmlSerializer(Type);
                xmlSerializer.Serialize(writer, P_obj);
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml.Serialization;
使用System.IO;
名称空间清晰.class
{
公共类XmlManager
{
公共类型;
公共T加载(字符串P_路径)
{
T例;
使用(TextReader=新的StreamReader(P_路径))
{
XmlSerializer XmlSerializer=新XmlSerializer(类型);
实例=(T)xmlSerializer.Deserialize(读取器);
}
返回实例;
}
公共无效保存(字符串P_路径,对象P_obj)
{
使用(TextWriter writer=新StreamWriter(P_路径))
{
XmlSerializer XmlSerializer=新XmlSerializer(类型);
serializer.Serialize(writer,P_obj);
}
}
}
}
这是我要反序列化到的类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace Lucid.Classes
{
    [XmlRoot("SplashScreen")]
    public class SerializableSplashScreen
    {
        [XmlElement("Image")]
        public List<string> imgPathList { get; set; }
        [XmlElement("Song")]
        public List<string> songPathList { get; set; }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml.Serialization;
名称空间清晰.class
{
[XmlRoot(“SplashScreen”)]
公共类序列化SplashScreen
{
[XmlElement(“图像”)]
公共列表imgPathList{get;set;}
[XmlElement(“歌曲”)]
公共列表路径列表{get;set;}
}
}

不知何故,它只接收图像中的第一条路径,而不记录其余路径。我做错什么了吗?

好的,我找到了解决办法。问题出在xml文件中。正确的书写方法是:

<?xml version="1.0" encoding="utf-8" ?>
<SplashScreen>
  <Image>Visual/Screens/SplashScreen/samurai1024-768</Image>
  <Image>Visual/Screens/SplashScreen/Humanoid1024-768</Image>
  <Song>Audio/SplashScreen/wardrums</Song>
</SplashScreen>

视觉/屏幕/飞溅屏幕/武士1024-768
视觉/屏幕/飞溅屏幕/仿人1024-768
音频/溅屏/衣柜

尝试此类定义,您应该能够正确地反序列化您的XML:

[Serializable]
[XmlRoot("SplashScreen")]
public class SerializableSplashScreen
{
    [XmlElement]
    public Image Image { get; set; }

    [XmlElement]
    public Song Song { get; set; }
}

[Serializable]
public class IsPath
{
    [XmlElement]
    public List<string> Path { get; set; }
}

[Serializable]
public class Image : IsPath
{
}

[Serializable]
public class Song : IsPath
{
}
[可序列化]
[XmlRoot(“SplashScreen”)]
公共类序列化SplashScreen
{
[XmlElement]
公共映像映像{get;set;}
[XmlElement]
公共歌曲{get;set;}
}
[可序列化]
公共类iPath
{
[XmlElement]
公共列表路径{get;set;}
}
[可序列化]
公共类映像:IsPath
{
}
[可序列化]
公共类歌曲:iPath
{
}

对于这样一个简单的xml,您不需要对其进行序列化。只需使用LINQ2XML或XMLReaderHMM这是一个学校项目的小游戏,可以在一小时内学会吗?;)我还应该提到,同一个xmlManager类将被起诉用于更复杂的东西,如加载映射。。。