2016-06-28 22 views
0

Personという名前のオブジェクトに属するID、名前、年齢を保存するXMLシリアル化をさらに学習するために、ちょっとしたプログラムをやっています。しかし、何とか例外がスローされます(xmlTeste.Personは保護レベルのためアクセスできません。パブリックタイプのみが処理可能です)。コードをどのように改善できますか?期待される結果は、オブジェクトPersonで作成されるxmlファイルです。シリアル化時の保護レベルの問題

対象者:

class Person 
{ 
     #region Variables 

    private int id = 0; 
    private string name = string.Empty; 
    private int idade = 0; //it's age in portuguese 

    #endregion 

    #region Properties 

    public int Id 
    { 
     get { return id; } 
     set { id = value; } 
    } 

    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

    public int Idade //again... means age 
    { 
     get { return idade; } 
     set { idade = value; } 
    } 

    #endregion 
} 

私のクラスが管理する

class XMLController 
{ 
    private static void SerializeAndSaveObject(XmlSerializer writer, Person item) 
    { 
     var path = "C://Folder//teste.xml"; 
     FileStream file = File.Create(path); 

     writer.Serialize(file, item); 
     file.Close(); 
    } 

    public static void SaveFile(Person person) 
    { 
     SerializeAndSaveObject(new XmlSerializer(typeof(Person)), pessoa);//here is where i am having the error 
     //An unhandled exception of type 'System.InvalidOperationException' occurred in System.Xml.dll 
     //Additional information: xmlTeste.Pessoa is inaccessible due to its protection level. Only public types can be processed. 
    } 

} 

使用XMLシリアル化:

 private void btnGo_Click(object sender, EventArgs e) 
    { 

     Person p = new Person 
     { 
      Id = 2, 
      Name = "DEFEF", 
      Idade = 2 //means age 
     }; 
     xmlTeste.XMLController.SaveFile(p); 


    } 

答えて

4

Personは内部クラスです。それは例外が話している "保護レベル"です。保護レベルを明示的に指定しない場合、C#ではinternalがデフォルトです。それだけが唯一の公共のタイプを処理できる場合は、パブリック型が

を処理することができ、そしてあなたはそれがあなたのタイプを処理したい、あなたのタイプは、公共作ってみる

。シリアライゼーションコードはクラスにアクセスできないため、シリアライゼーションコードはクラスで何もできません。内部的には、アセンブリの外部にいる誰もアクセスできません。

ので、あなたのようなクラスを定義します。

public class Person { 
... 
+0

私は間違いを探して時間を費やし、それは...それを指摘してくれてありがとうとても明らかでした! – wannabeLearner

+0

@AlexeiLevenkov更新、tx –