如何解除xml并打印到控制台?

时间:2017-08-28 20:47:57

标签: c# xml deserialization

我有一个代码

            [XmlRoot("user_list")]
        public class UserList
        {
            public UserList() { Items = new List<User>(); }
            [XmlAttribute("user")]
            public List<User> Items{get; set; }
        }
        [XmlType("user")]
        public class User
        {
            [XmlAttribute("id")]
            public string Id{get; set; }

            [XmlAttribute("name")]
            public string Name{get; set; }   

        }        

    class Program
    {    
        static void Main(string[] args)
        {  
            Program o = new Program();
                o.Deser();
            List<User> p = new List<User>();

            foreach (User c in p)
            {
                Console.WriteLine(c.Id);
                Console.WriteLine(c.Name);
            }     
            Console.ReadKey();
        }
             public void Deser()
        {
                List<User> users;
    using (var reader = new StreamReader("fileXML.xml"))
    {
         XmlSerializer deserializer = new XmlSerializer(typeof(List<User>),  
            new XmlRootAttribute("user_list"));
        users = (List<User>)deserializer.Deserialize(reader)
    }  
   }
 }

并且VS中没有输出也没有错误。我做错了什么?以及如何在调试模式下查看列表包含哪些内容? 我认为可能是反序列化的一些问题,但不知道是什么。

不要怪我(

BTW测试xml是

<?xml version="1.0"?>
<user_list>
  <user>
    <id>1</id>
    <name>Joe</name>
  </user>
  <user>
    <id>2</id>
    <name>John</name>
  </user>
</user_list>

2 个答案:

答案 0 :(得分:0)

更改方法的签名:

    public static IEnumerable<User> Deser()
    { /* all your code */
           return users; }

更改您的主要内容:

    static void Main()
    {
           var users = Deser();
           /* your foreach */
     }

答案 1 :(得分:0)

试试这个:

 [XmlRoot("user_list")]
    public class UserList
    {
        public UserList() { }
        [XmlAttribute("user")]
        public List<User> Items { get; set; }
    }
    [XmlType("user")]
    public class User
    {
        // [XmlAttribute("id")]
        public string id { get; set; }
        // [XmlAttribute("name")]
        public string name { get; set; }
    }