我在做一个 Xml 序列化的小练习的时候遇到了这个报错。现分享一下解决方法。
Unhandled exception. System.InvalidOperationException: Serialize.Program+Person[] is inaccessible due to its protection level. Only public types can be processed.
这里的报错信息很明显了,是访问权限的问题。
这里是源码:
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Xml.Serialization;
namespace Serialize
{
class Program
{
[Serializable]
public class Person
{
public int Age { get; set; }
public string Name { get; set; }
public Person() { }
public Person(string name,int age)
{
Age = age;
Name = name;
}
public override string ToString()
{
return "Name:" + Name + ", Age:" + Age;
}
}
static void Main(string[] args)
{
Person[] persons = { new Person("zhang", 23), new Person("wang", 22) };
Console.WriteLine("original array object:");
Array.ForEach(persons, p => Console.WriteLine(p.ToString()));
//xml序列化
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Person[]));
using (FileStream fs = new FileStream("s.xml", FileMode.Create))
{
xmlSerializer.Serialize(fs, persons);
}
Console.WriteLine("\n Serialized as XML");
Console.WriteLine(File.ReadAllText("s.xml"));
using (FileStream fs = new FileStream("s.xml", FileMode.Open))
{
Person[] persons3 = (Person[])xmlSerializer.Deserialize(fs);
Console.WriteLine("\n Deserialized from s.xml");
Array.ForEach(persons3, p => Console.WriteLine(p));
}
}
}
}
一开始以为是 Person 类的访问权限没有 public 造的孽。回头一看发现 Person 类是有 public 的。
这就难受了。
经过一波查找,终于发现这里的 Person 类写的是 Program 类的嵌入类。
但是! Program 类不是 public 的!
所以解决方法就是,在 class Program 前面加上 public 就可以了!
public class Program{
……
}
(如有错误,欢迎批评指正~ 感激不尽!)
Over~