2013-03-23 52 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