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%正确。我只是觉得它不是创建一个文件,而是尝试在已经存在的文件中写一些东西。

顺便说一句,对不起,我不能感谢你的声誉,因为我现在不能这样做。但是现在有我的"口头感谢":)

C# XMLSerialization error, System.InvalidOperationException

XmlSerializer只能序列化公共类和成员。要么使Doctor及其所有基类public class,要么使用不同的序列化器(例如DataContractSerializer)。