2015-10-06 94 views
4

我試圖將列表數據設置爲xml格式。我有一個複雜的對象XmlSerializer拋出異常「System.InvalidOperationException」

類的用戶信息是包含另一個類對象的列表

[Serializable] 
class UserInfo : Address 
{ 
    [XmlElement("Firstname")] 
    public String firstname { get; set; } 
    [XmlElement("Surname")] 
    public String surname { get; set; } 
    [XmlArray("Addresses")] 
    // [XmlArrayItem("Address",typeof(Address))] 
    public List<Address> addressesL { get; set;} 
} 

地址類只有一個字符串

class Address 
{ 

[XmlElement("Address")] 
    public String saddress { get; set; } 
} 

這裏的領域是主

static void Main(string[] args) 
    { 



     UserInfo user = new UserInfo(); 
     Address adres = new Address(); 
     List<Address> adresl = new List<Address>(); 
     List<UserInfo> userlist = new List<UserInfo>(); 
     user.firstname = "Mustafa"; 
     user.surname = "Alqanbar"; 

     adres.saddress = "Saudi Arabia"; 
     adresl.Add(adres); 

     adres = new Address(); 
     adres.saddress = "Australia"; 
     adresl.Add(adres); 

     user.addressesL = adresl; 


     userlist.Add(user); 

     for (int i = 0; i < userlist.Count; i++) 
     { 
      Console.Write("{0} {1} ",userlist[i].firstname, userlist[i].surname); 
      for (int j = 0; j < userlist[i].addressesL.Count; j++) 
      { 
       Console.Write("{0} ",userlist[i].addressesL[j].saddress); 
      } 
      Console.WriteLine(); 
     } 
     XmlSerializer ser = new XmlSerializer((typeof(List<UserInfo>))); 
     // XmlSerializer deser = XmlSerializer.FromTypes(new[] { (typeof(List<UserInfo>)) })[0]; 


      using (TextWriter writer = new StreamWriter(@"c:\x.xml")) 
      { 
       ser.Serialize(writer, user); 
      } 


      Console.ReadKey(); 
    } 

我看了一些堆棧溢出的帖子,但是我無法排除我的問題。

+2

每當你發佈一個錯誤,請張貼*完整的錯誤*。發佈完整的堆棧跟蹤,包括任何消息。 –

+1

準確地說,可能有錯誤解釋的可能性。 –

回答

3

據我瞭解,XmlSerializer要寫入和讀取的類必須在其名稱空間中聲明爲public;至少在this example是這樣。

+1

非常感謝您解決問題 –

+2

@MSTQNB如果答案解決了您的問題,請考慮將其標記爲已接受 –

0

如果我將字符串XmlSerializer ser = new XmlSerializer((typeof(List<UserInfo>)));更改爲XmlSerializer ser = new XmlSerializer(typeof(UserInfo));那麼它適用於我。

的類必須聲明爲公共