Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将XML文件反序列化为对象列表_C#_Asp.net_Xml_Serialization_Deserialization - Fatal编程技术网

C# 如何将XML文件反序列化为对象列表

C# 如何将XML文件反序列化为对象列表,c#,asp.net,xml,serialization,deserialization,C#,Asp.net,Xml,Serialization,Deserialization,我需要帮助,我已经在一个名为class 1的类上序列化了XML文件,该类包含另一个名为service的类类型的列表 将列表序列化为XML文件后,我尝试将该文件反序列化为服务类型列表 这是1级代码: public class Class1 { public Class1() { ServiceList = new List<service>(); } public List<service> ServiceList { g

我需要帮助,我已经在一个名为class 1的类上序列化了XML文件,该类包含另一个名为service的类类型的列表 将列表序列化为XML文件后,我尝试将该文件反序列化为服务类型列表

这是1级代码:

public class Class1

{
    public Class1()
    {
        ServiceList = new List<service>();

    }
    public List<service> ServiceList { get; set; }
}

public class service
{
    public string ServiceName { get; set; }
    public string Symbol { get; set; }

}
这是XML数据:

<?xml version="1.0"?>
<Class1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ServiceList>
<service>
  <ServiceName>cool</ServiceName>
  <Symbol>v</Symbol>
</service>
<service>
  <ServiceName>cool</ServiceName>
  <Symbol>v</Symbol>
</service>
<service>
  <ServiceName>cool</ServiceName>
  <Symbol>v</Symbol>
</service>
<service>
  <ServiceName>cool</ServiceName>
  <Symbol>v</Symbol>
</service>
<service>
  <ServiceName>cool</ServiceName>
  <Symbol>v</Symbol>
</service>
<service>
  <ServiceName>cool</ServiceName>
  <Symbol>v</Symbol>
</service>
<service>
  <ServiceName>cool</ServiceName>
  <Symbol>v</Symbol>
</service>
<service>
  <ServiceName>cool</ServiceName>
  <Symbol>v</Symbol>
</service>
<service>
  <ServiceName>cool</ServiceName>
  <Symbol>v</Symbol>
</service>
<service>
  <ServiceName>cool</ServiceName>
  <Symbol>v</Symbol>
</service>
 </ServiceList>
</Class1>   
这是我的反序列化代码,运行正常,但没有给出正确的输出

        XmlSerializer myDeserilizer = new XmlSerializer(typeof(List<service>) ,  new XmlRootAttribute("Class1"));
        FileStream myfilestream = new FileStream("sth.xml", FileMode.Open);
        var loadedData = (List<service>)myDeserilizer.Deserialize(myfilestream);
        myfilestream.Close();  
问题是我在反序列化后没有获取列表
有什么帮助吗

按如下所示重写代码并查看结果:

[XmlRoot(ElementName = "Class1"), XmlType("Class1")]
public class Class1
{
  public Class1()
  {
     ServiceList = new List<service>();

  }
  [XmlElement(ElementName = "ServiceList")
  public List<service> ServiceList { get; set; }
}

[XmlRoot(ElementName = "Service"), XmlType("Service")]
public class service
{
   [XmlElement(ElementName = "ServiceName")
   public string ServiceName { get; set; }

   [XmlElement(ElementName = "Symbol")
   public string Symbol { get; set; }
}

它应该可以工作,我在我的本地测试了

你的反序列化过去有问题,你可以简单地更改你的反序列化部分,如下所示

        XmlSerializer myDeserilizer = new XmlSerializer(typeof(Class1));
        FileStream myfilestream = new FileStream("sth.xml", FileMode.Open);
        var loadedData = (Class1)myDeserilizer.Deserialize(myfilestream);
        var listOfServices = loadedData.ServiceList;
        myfilestream.Close();

您尝试过新的XmlSerializertypeofClass1吗?它应该working@Peyman你是说在序列化代码中?在去序列化代码中不是,XmlSerializer MyDeserializer=newXmlSerializertypeofClass1@Peyman我尝试了它,它给了我以下错误:无法将“WindowsFormsApplication4.Class1”类型的对象强制转换为“System.Collections.Generic.List`1[WindowsFormsApplication4.service]”类型。请尝试我的答案,它应该是有效的
XmlSerializer myDeserilizer = new XmlSerializer(typeof(Class1));
FileStream myfilestream = new FileStream("sth.xml", FileMode.Open);
var loadedData = myDeserilizer.Deserialize(myfilestream);
myfilestream.Close();  
        XmlSerializer myDeserilizer = new XmlSerializer(typeof(Class1));
        FileStream myfilestream = new FileStream("sth.xml", FileMode.Open);
        var loadedData = (Class1)myDeserilizer.Deserialize(myfilestream);
        var listOfServices = loadedData.ServiceList;
        myfilestream.Close();