简体   繁体   English

如何反序列化 XML 文件?

[英]How do I deserialize XML file?

I have several xml files with the same structure, and I would like to have all data in one List.我有几个结构相同的 xml 文件,我想将所有数据放在一个列表中。 A list of players.球员名单。

Each xml contains thousands of players.每个 xml 包含成千上万的玩家。

Unfortunatly, I have only the first player of each xml file.不幸的是,我只有每个 xml 文件的第一个播放器。 Where is my error and how to correct it ?我的错误在哪里以及如何纠正?

Thanks for your answers.感谢您的回答。

my xml file has these structure (full structure below, in my model) :我的 xml 文件具有以下结构(下面的完整结构,在我的模型中):

<playerslist>
<player>
<name>John Doe</name>
<country>ENG</country>
<rating>1850</rating>
</player>
<player>
<name>Johnny Depp</name>
<country>USA</country>
<rating>1765</rating>
</player>
<playerslist>

My C# code :我的 C# 代码:

if (Directory.Exists(sourceFolderPath))
            {
                DirectoryInfo dirSource = new DirectoryInfo(sourceFolderPath);
                var allStandardFiles = dirSource.GetFiles("*standard*", SearchOption.AllDirectories).ToList();

                List<Playerslist> listAllEntriesStandard = new List<Playerslist>();


                foreach (var nextFile in allStandardFiles)
                {
                    try
                    {
                        XmlSerializer serializer = new XmlSerializer(typeof(Playerslist));
                        using (TextReader reader = new StringReader(System.IO.File.ReadAllText(nextFile.FullName)))
                        {
                            Playerslist result = (Playerslist)serializer.Deserialize(reader);
                            listAllEntriesStandard.Add(result);
                        }
                    }
                    catch (Exception ex)
                    {

                    }
                }
            }

and my model :和我的模型:

public class PlayerXML
{
    public class Player
    {
        [XmlElement(ElementName = "fideid", Namespace = "")]
        public int FideId { get; set; }
        [XmlElement(ElementName = "name", Namespace = "")]
        public string Name { get; set; }
        [XmlElement(ElementName = "country", Namespace = "")]
        public string Country { get; set; }
        [XmlElement(ElementName = "sex", Namespace = "")]
        public string Sex { get; set; }
        [XmlElement(ElementName = "title", Namespace = "")]
        public string Title { get; set; }
        [XmlElement(ElementName = "w_title", Namespace = "")]
        public string W_Title { get; set; }
        [XmlElement(ElementName = "o_title", Namespace = "")]
        public string O_Title { get; set; }
        [XmlElement(ElementName = "foa_title", Namespace = "")]
        public string Foa_Title { get; set; }
        [XmlElement(ElementName = "rating", Namespace = "")]
        public int Rating { get; set; }
        [XmlElement(ElementName = "games", Namespace = "")]
        public int Games { get; set; }
        [XmlElement(ElementName = "k", Namespace = "")]
        public int K_Factor { get; set; }
        [XmlElement(ElementName = "birthday", Namespace = "")]
        public int Birthday { get; set; }
        [XmlElement(ElementName = "flag", Namespace = "")]
        public string Flag { get; set; }
    }
    [XmlRoot(ElementName = "playerslist", Namespace = "")]
    public class Playerslist
    {
        [XmlElement(ElementName = "player", Namespace = "")]
        public Player Player { get; set; }
    }
}
public class Serializer
{
    public static T DeserializeObject<T>(string deserializedObject)
    {
        var serializer = new XmlSerializer(typeof(T));
        var reader = new StringReader(deserializedObject.Replace("&#x0;", "").Replace("encoding =\"utf-16\"", ""));
        return (T)serializer.Deserialize(reader);
    }

    public static string SerializeObject<T>(T obj)
    {
        XmlSerializer xmlSerializer = new XmlSerializer(obj.GetType());
        StringWriter sw = new StringWriter();
        xmlSerializer.Serialize(sw, obj); 
        return sw.ToString();
    }

}

You should import System.IO and System.Xml.Serialization您应该导入 System.IO 和 System.Xml.Serialization

And this my objects这是我的对象

[Serializable]
public class MyObj
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string ReferenceId { get; set; }
}

[Serializable]
public class MyAnotherObj
{
    public int Id { get; set; }
    public MyObj Obj { get; set; }
}

And I use我用

var myObj = new MyAnotherObj();

//Set myObj

var serializeObj = Serializer.SerializeObject(myObj);
var deserializeObj = Serializer.DeserializeObject<MyAnotherObj>(serializeObj);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM