这个挺规则的啊,就是缺了一个root的element。下面的代码加入<xml></xml>作为root
 //test xml
            string input = @"<xml>" +
                            @"<code>0</code>" +
                           @" <message>Success</message>" +
                           @"<roles>" +
                           @"<role><name>Role1</name><selected>false</selected></role>" +
                           @"<role><name>Role2</name><selected>true</selected></role>" +
                           @"</roles>" +
                           @"</xml>";            XmlSerializer serializer = new XmlSerializer(typeof(Response), "");
            using (TextReader reader = new StringReader(input))
            {
                Response result = serializer.Deserialize(reader) as Response;
            }   [Serializable]
    [XmlRoot(ElementName= "xml")]
    public class Response
    {
        public int code { get; set; }
        public string message { get; set; }        [XmlArrayItem(typeof(role))]
        public List<role> roles { get; set; }
    }    [Serializable]
    public class role
    {
        public string name { get; set; }
        public bool selected { get; set; }
    }

解决方案 »

  1.   

    有时用dataset也很方便tt.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <root>
     <code>0</code>
     <message>Success</message>
    <roles>
       <role>
         <name>Role1</name>
         <selected>false</selected>
       </role>
       <role> 
           <name>Role2</name>
            <selected>true</selected>
       </role>
     </roles>
    </root>
      DataSet dt = new DataSet();
                dt.ReadXml("tt.xml");
                string code=dt.Tables["root"].Rows[0]["code"].ToString();
                string message = dt.Tables["root"].Rows[0]["message"].ToString();
                string name1 = dt.Tables["role"].Rows[0]["name"].ToString();
                string selected1 = dt.Tables["role"].Rows[0]["selected"].ToString();
                string name2 = dt.Tables["role"].Rows[1]["name"].ToString();
                string selected2 = dt.Tables["role"].Rows[1]["selected"].ToString();