序列化时保护级别的问题

本文关键字:问题 保护 序列化 | 更新日期: 2023-09-27 17:52:38

我正在做一个小程序,只是为了进一步学习xml序列化,其中我保存id,名称,年龄属于一个名为Person的对象。但不知何故,它抛出了一个异常(xmlTeste。由于其保护级别,该人员无法访问。只能处理公共类型)。我如何改进我的代码?预期的结果是使用对象Person创建一个xml文件。

对象Person:

    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);

    }

序列化时保护级别的问题

Person是一个内部类。这就是例外所说的"保护级别"。在c#中,如果没有显式指定保护级别,则internal是默认的。

只能处理公共类型

如果它只能处理公共类型,而你想让它处理你的类型,试着把你的类型设为公共。序列化代码不能对你的类做任何事情,因为序列化代码不能访问你的类——内部意味着除了它自己的程序集之外没有人可以访问它。

像这样定义你的类:

public class Person {
...