C# XMLSerialization error, System.InvalidOperationException
本文关键字:System InvalidOperationException error XMLSerialization | 更新日期: 2023-09-27 18:05:31
我是XMLSerialization的新手,没有人可以帮助我解决这个问题,所以这里是我想要XMLSerialize/Deserialize的一部分代码,以及一个错误本身。
我有三个类:
public class Contacts
{
public string country;
public string city;
public string street;
public int houseNumber;
public int flatNumber;
public int phoneNumber;
public Contacts(){...};
public Contacts(string cntry, string city, string str, int houseNum, int flatNum, int phoneNum){...};
public override string ToString(){...};
}
public class SimpleHuman
{
public string firstName;
public string lastName;
public int age;
public string sex;
public Contacts contacts;
public SimpleHuman(){...};
public SimpleHuman(string fn, string ln, int a, string s, Contacts c){...};
public override string ToString(){...};
}
public class doctor : SimpleHuman
{
public DateTime contractExpirationDate;
public int idNumber;
public List<int> doctorPatients;
public doctor(){...};
public doctor(string name, string surname, int age, string sex, int doctorID, Contacts c):base(name, surname, age, sex, c){...};
public override string ToString(){...};
}
问题是,当我试图序列化类"医生"到XML文件:
XmlSerializer SerializerDoc = new XmlSerializer(typeof(doctor));
foreach(doctor d in doctorList)
{
TextWriter WriteFileStream = new StreamWriter("doctors/" + d.firstName + d.lastName + ".xml");
SerializerDoc.Serialize(WriteFileStream, d);
WriteFileStream.Close();
}
我在创建一个TextWriter(从下面的俄语翻译过来)时得到这个错误:
"Необработанное исключение:系统。InvalidOperationException:诊所。医生недос тупен, силу его уровня защиты。Возможнаобработкатолько общих типов。ввSystem.Xml.Serialization.TypeDesc.CheckSupported ()System.Xml.Serialization.TypeScope。getypedesc(类型类型,MemberInfosource, Boolean directReference, Boolean throwOnErrorSystem.Xml.Serialization.ModelScope。GetTypeModel(类型类型,Boolean)(直接引用System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(类型类型,XmlRootAttribute根,字符串defaultNamespaceSystem.Xml.Serialization.XmlSerializer . .类型类型,字符串defaultNames (System.Xml.Serialization.XmlSerializer . .(类型类型вClinic.Clinic.saveDoctorInfo ()d:'Dropbox'CSharpHomeWork'ExamTask'Clinic' Program.cs:строка 833вClinic.Clinic.launchMenu ()d:'Dropbox'CSharpHomeWork'ExamTask'Clinic' program .cs:строка 463Clinic.Program。Main(String[] argsd:'Dropbox'CSharpHomeWork'ExamTask'Cli nic'Program.cs:строка 870按任意键继续…"
我用的是俄文版本的WIN7,所以俄文的消息是这样的:"未处理的异常:.......:诊所。医生无法使用,因为它的保护级别。可以只处理泛型类型。"翻译几乎是逐字翻译,所以请记住。
希望有人能帮助我,因为我可以写类"医生"与简单的"XML作家",但仍然没有意义(我认为),只要我能保存它一行,而不是20。
谢谢。
update:只是做了所有的类- public。现在我得到错误的字符串:TextWriter WriteFileStream = new StreamWriter("doctors/" + d.firstName + d.lastName + ".xml");
It sais like:
未处理的异常:System.IO.DirectoryNotFoundException:未能找到路径"D:'Dropbox'CSharpHomeWork'ExamTask'Clinic'bin'Debug'doctors'Anders"的一部分onNeo.xml"。
路径100%正确。我只是觉得它不是创建一个文件,而是尝试在已经存在的文件中写一些东西。
顺便说一句,对不起,我不能感谢你的声誉,因为我现在不能这样做。但是现在有我的"口头感谢":)
XmlSerializer
只能序列化公共类和成员。要么使Doctor
及其所有基类public class
,要么使用不同的序列化器(例如DataContractSerializer
)。