2013-03-23 84 views
1

我是XMLSerialization的新手,并且没有人会帮助我解决它,所以这里是我想要的XMLSerialize/Deserialize的代码的一部分,并且是一个错误本身。C#XMLSerialization错误,System.InvalidOperationException

我有三类:

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(从russina下面的翻译):

“不正确的操作系统:System.InvalidOperation例外情况: Clinic.doctor不需要任何服务。 Возможнаобработка толькообщихтипов。 в System.Xml.Serialization.TypeDesc.CheckSupported()в System.Xml.Serialization.TypeScope.GetTypeDesc(类型类型,的MemberInfo 源,布尔directReference,布尔throwOnError)в System.Xml.Serialization.ModelScope.GetTypeModel(型类型,布尔 directR eference)в System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(类型 类型,XmlRootAttribute根,字符串defaultNamespace)в System.Xml.Serialization.XmlSerializer..ctor(型型,字符串 defaultNames步伐) System.Xml.Serialization.XmlSerializer..ctor(Type type) Clinic.Clinic.saveDoctorInfo() d:\ Dropbox \ CSharpHomeWork \ ExamTask \ Cl 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:строка870按 任意键继续。 。 “

我WIN7的俄语版本,因此对俄罗斯的消息告诉是这样的:” Unhandeled异常:.......:Clinic.doctor不可用,因为保护它的水平。 “ 翻译的几乎文字,所以请记住,

希望有人会帮助我,因为我可以用简单的”XML编写器“编写类”医生“,但仍然没有任何意义( 。因为我认为),据我可以用一条线将其保存,而不是20

谢谢你们

UPADTE:只是做了所有的类 - 大众现在我得到错误的字符串: TextWriter WriteFileStream = new StreamWriter(“doctors /”+ d.firstName + d.lastName +“.xml”);

It sais like: 

未处理的异常:System.IO.DirectoryNotFoundException:无法找到路径的一部分 “d:\ Dropbox的\ CSharpHomeWork \ ExamTask \诊所\ BIN \调试\医生\安德斯 onNeo.xml”。

路径是100%正确的。我只是觉得不是创建一个文件,而是试图在已经存在的文件中写一些东西。

顺便说一句,抱歉,我不能以声誉感谢你,因为我现在不能那样做。但现在我的“口头感谢”:)

回答

3

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

+0

谢谢,完成。但是现在我对同一个代码串有一个新问题。它似乎没有找到指定的路径。即使这条道路是100%正确的。 – Kamilius 2013-03-23 13:17:28

+1

医生\目录是否已经存在? StreamWriter不会为您创建目录。 – 2013-03-23 13:48:09

+0

是的,我创建它manualy。 – Kamilius 2013-03-23 14:16:13