C# 将xml反序列化为列表

C# 将xml反序列化为列表,c#,C#,我有一个基于模型的正常列表,如: public List<ProjectHistoryModel> ProjectHistoryModel = new List<ProjectHistoryModel>(); 型号: public class ProjectHistoryModel { public int JobNumber { get; set; } public int DesignKey { get; set; } public str

我有一个基于模型的正常列表,如:

public List<ProjectHistoryModel> ProjectHistoryModel = new List<ProjectHistoryModel>();
型号:

public class ProjectHistoryModel
{
    public int  JobNumber { get; set; }
    public int DesignKey { get; set; }
    public string ProjectName { get; set; }
}
在课堂上,我有一个这样的模型列表:

public List<ProjectHistoryModel> ProjectHistoryModel = new List<ProjectHistoryModel>();
现在我的问题是:如何反序列化此xml并再次转换为列表? 我试过这样的方法,但我被卡住了:

  public static List<string> Load()
        {
            var xmlList = XML.HistoryProjects;

            using (var stream = System.IO.File.OpenRead(FileName))
            {
                var serializer = new XmlSerializer(xmlList));
                return serializer.Deserialize(stream) as [xmlList];
            }
        }
公共静态列表加载()
{
var xmlList=XML.HistoryProjects;
使用(var stream=System.IO.File.OpenRead(文件名))
{
var serializer=新的XmlSerializer(xmlList));
返回序列化程序。反序列化(流)为[xmlList];
}
}

关于

你只需要反过来做同样的事情,使用StringReader而不是writer

public static T DeserializeObject<T>(this string source) 
{
    if (string.IsNullOrEmpty(source))
    {
        return default(T);
    }
    try
    {
        var xmlserializer = new XmlSerializer(typeof(T));
        var stringReader = new StringReader(source);
        using (var reader = XmlReader.Create(stringReader))
        {
            var result = xmlserializer.Deserialize(reader);
            return (T)result;
        }
    }
    catch (Exception ex)
    {
        throw new Exception("An error occurred", ex);
    }
}
publicstatict反序列化对象(此字符串源)
{
if(string.IsNullOrEmpty(源))
{
返回默认值(T);
}
尝试
{
var xmlserializer=新的xmlserializer(typeof(T));
var stringReader=新的stringReader(源);
使用(var reader=XmlReader.Create(stringReader))
{
var result=xmlserializer.Deserialize(读取器);
返回(T)结果;
}
}
捕获(例外情况除外)
{
抛出新异常(“发生错误”,例如);
}
}
然后用以下词语来称呼它:

    var input = new List<ProjectHistoryModel>();
    var serialized = input.SerializeObject();
    var output = serialized.DeserializeObject<List<ProjectHistoryModel>>();
var输入=新列表();
var serialized=input.SerializeObject();
var output=serialized.DeserializeObject();

这里是一个链接。

你能详细说明一下你的代码是如何“不工作”的吗?你在期待什么,到底发生了什么?如果您遇到异常/错误,请发布发生该异常/错误的行以及异常/错误详细信息。请输入这些详细信息,否则我们可能无法提供帮助。T需要是ProjectHistoryModel[],但这无法实现。序列化程序只需要一个根节点。所以List ProjectHistoryModel需要嵌入到根类中。代码在哪里!到目前为止,您试图反序列化什么?我发布了@RomanMarusykWhat type of object is
input.SerializeObject()是一个字符串(序列化对象)。因此,如果我尝试使用反序列化方法,它会抛出“'string'不包含'DeserializeObject'的定义,并且找不到接受第一个'string'类型参数的扩展方法'DeserializeObject'(是否缺少using指令或程序集引用?”确保已将
反序列化对象
定义为扩展方法,并将其命名空间包含在所需的代码文件中。请参阅。
    var input = new List<ProjectHistoryModel>();
    var serialized = input.SerializeObject();
    var output = serialized.DeserializeObject<List<ProjectHistoryModel>>();