我是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(){...};
}
问题是,当我尝试将类“doctor”序列化为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时会遇到此错误(来自russina的翻译):
“Необработанноеисключение:System.InvalidOperationException: Clinic.doctorнедоступенвсилуегоуровнязащиты。 Возможнаобработка толькообщихтипов。 в System.Xml.Serialization.TypeDesc.CheckSupported()в System.Xml.Serialization.TypeScope.GetTypeDesc(Type type,MemberInfo source,Boolean directReference,Boolean throwOnError)в System.Xml.Serialization.ModelScope.GetTypeModel(Type type,Boolean directR eference)в System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(类型 type,XmlRootAttribute root,String defaultNamespace)в System.Xml.Serialization.XmlSerializer..ctor(Type type,String defaultNames pace)в System.Xml.Serialization.XmlSerializer..ctor(Type type)в Clinic.Clinic.saveDoctorInfo()в d:\ Dropbox \ CSharpHomeWork \ ExamTask \ Clinic \ Program.cs:строка863в Clinic.Clinic.launchMenu()в d:\ Dropbox \ CSharpHomeWork \ ExamTask \ Clinic \ Prog ram.cs:строка463в Clinic.Program.Main(String [] args)в d:\ Dropbox \ CSharpHomeWork \ ExamTask \ Cli nic \ Program.cs:строка870Press 任何继续的关键。 。 。“
我有一个俄语版的WIN7,所以俄语上的消息告诉我们:“Unhandeled exception:.......:Clinic.doctor因为它的保护级别而无法使用。它可以只处理一个通用的类型“。 翻译几乎是文字,所以请记住。
希望有人会帮助我,因为我可以用简单的“XML Writer”编写“医生”课程但仍然没有意义(我认为),只要我可以用一行代替20而不是它。 / p>
谢谢你们。
Upadte:刚刚完成所有课程 - 公开。现在我收到字符串错误: 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%正确。我只是觉得不是创建一个文件,它只是尝试在现有的文件中写一些东西。
顺便说一句,对不起,我不能用声誉来感谢你,因为我现在不能这样做。但是现在我的“口头表示感谢”:)答案 0 :(得分:3)
XmlSerializer
只能序列化公共类和成员。制作Doctor
及其所有基类public class
或使用其他序列化程序(例如DataContractSerializer
)。