C#XMLSerialization错误,System.InvalidOperationException

时间:2013-03-23 12:18:03

标签: c# xml-serialization invalidoperationexception

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

顺便说一句,对不起,我不能用声誉来感谢你,因为我现在不能这样做。但是现在我的“口头表示感谢”:)

1 个答案:

答案 0 :(得分:3)

XmlSerializer只能序列化公共类和成员。制作Doctor及其所有基类public class或使用其他序列化程序(例如DataContractSerializer)。