2016-06-28 46 views
0

我正在做一個小程序來進一步學習xml序列化,以便保存屬於名爲Person的對象的id,name,age。但不知何故,它會拋出一個異常(由於其保護級別,xmlTeste.Person無法訪問,只能處理公共類型)。我如何改進我的代碼?預期的結果是用對象Person創建的xml文件。序列化時的保護級別問題

對象者:

class Person 
{ 
     #region Variables 

    private int id = 0; 
    private string name = string.Empty; 
    private int idade = 0; //it's age in portuguese 

    #endregion 

    #region Properties 

    public int Id 
    { 
     get { return id; } 
     set { id = value; } 
    } 

    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

    public int Idade //again... means age 
    { 
     get { return idade; } 
     set { idade = value; } 
    } 

    #endregion 
} 

我的類來管理XML序列化

class XMLController 
{ 
    private static void SerializeAndSaveObject(XmlSerializer writer, Person item) 
    { 
     var path = "C://Folder//teste.xml"; 
     FileStream file = File.Create(path); 

     writer.Serialize(file, item); 
     file.Close(); 
    } 

    public static void SaveFile(Person person) 
    { 
     SerializeAndSaveObject(new XmlSerializer(typeof(Person)), pessoa);//here is where i am having the error 
     //An unhandled exception of type 'System.InvalidOperationException' occurred in System.Xml.dll 
     //Additional information: xmlTeste.Pessoa is inaccessible due to its protection level. Only public types can be processed. 
    } 

} 

用法:

 private void btnGo_Click(object sender, EventArgs e) 
    { 

     Person p = new Person 
     { 
      Id = 2, 
      Name = "DEFEF", 
      Idade = 2 //means age 
     }; 
     xmlTeste.XMLController.SaveFile(p); 


    } 

回答

4

Person是一個內部類。這就是例外所說的「保護級別」。在C#中,如果不明確指定保護級別,則默認爲internal

只有公共類型可以加工

如果它只能處理公共類型,你想它來處理你的類型,請嘗試將類型的公共。序列化代碼無法對您的類執行任何操作,因爲序列化代碼無法訪問您的類 - 內部意味着它自己的程序集外沒有人可以訪問它。

定義類,像這樣:

public class Person { 
... 
+0

我花了找錯小時,它是如此明顯...感謝指出了這一點! – wannabeLearner

+0

@AlexeiLevenkov更新,tx –