【问题标题】:how can i deserialize xml in C#如何在 C# 中反序列化 xml
【发布时间】:2026-01-18 19:40:01
【问题描述】:

我的代码:

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


namespace PlaylistEditor.Writers
{
    public class XMLPlaylistWriter : IPlaylistWriter
    {
        public void Save(Playlist ply, string filePath)
        {
            StreamWriter writer = null;
            try
            {
                XmlSerializer xs = new XmlSerializer(ply.GetType());
                writer = new StreamWriter(filePath);
                xs.Serialize(writer, ply);

            }
            finally
            {
                if (writer != null)
                    writer.Close();
                writer = null;
            }
        }


        public Playlist Load(string filePath)
        {
          return null;    

        }


    }
}

我写的是加载“return null;”我对其进行了序列化并运行了代码,但我无法找到如何反序列化。感谢您的帮助。

【问题讨论】:

    标签: c# serialization xml-serialization deserialization xml-deserialization


    【解决方案1】:

    您需要使用XmlReader

    private Playlist Load(string filename)
    {
        Playlist playlist;
        // Create an instance of the XmlSerializer specifying type and namespace.
        var serializer = new
        XmlSerializer(typeof(Playlist));
    
        // A FileStream is needed to read the XML document.
        using (var fs = new FileStream(filename, FileMode.Open))
        {
            using (var reader = XmlReader.Create(fs))
            {
                playlist = (Playlist) serializer.Deserialize(reader);
                fs.Close();
            }
        }
        return playlist;
    }
    

    来自 msdn => link

    【讨论】:

    • @HimBromBeere 感谢您指出那个愚蠢的错误。更新了方法返回类型。 :)
    • i 更改为其他任何内容,添加finally(甚至更好,using),然后就可以开始了。
    • @YoryeNathan 你是对的。 FileStreamXmlReader 是 IDisposable 所以用 using 语句包装起来