2016-06-28 43 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 –