C# 序列化时出现保护级别问题
我正在做一个小程序,只是为了进一步学习xml序列化,我保存了一个名为Person的对象的id、名称和年龄。但不知怎的,它抛出了一个异常(xmlte.Person由于其保护级别而不可访问。只能处理公共类型)。如何改进代码?预期结果是使用对象Person创建一个xml文件 对象人:C# 序列化时出现保护级别问题,c#,xml,C#,Xml,我正在做一个小程序,只是为了进一步学习xml序列化,我保存了一个名为Person的对象的id、名称和年龄。但不知怎的,它抛出了一个异常(xmlte.Person由于其保护级别而不可访问。只能处理公共类型)。如何改进代码?预期结果是使用对象Person创建一个xml文件 对象人: class Person { #region Variables private int id = 0; private string name = string.Empty;
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#中,如果未明确指定保护级别,则默认为内部
只能处理公共类型
如果它只能处理公共类型,而您希望它处理您的类型,请尝试将您的类型设置为公共类型。序列化代码无法对您的类执行任何操作,因为序列化代码无权访问您的类——内部意味着在其自身程序集之外没有人可以访问它
这样定义您的类:
public class Person {
...
Person
是一个内部类。这就是异常所说的“保护级别”。在C#中,如果未明确指定保护级别,则默认为内部
只能处理公共类型
如果它只能处理公共类型,而您希望它处理您的类型,请尝试将您的类型设置为公共类型。序列化代码无法对您的类执行任何操作,因为序列化代码无权访问您的类——内部意味着在其自身程序集之外没有人可以访问它
这样定义您的类:
public class Person {
...
我花了几个小时寻找错误,这是如此明显。。。谢谢你指出这一点@阿列克谢列文科夫更新,txI花了数小时寻找错误,这是如此明显。。。谢谢你指出这一点@AlexeiLevenkov更新,德克萨斯州