2016-06-28 2 views
0

Я делаю небольшую программу, чтобы дополнительно изучить сериализацию xml, в которой я сохраняю идентификатор, имя, возраст, принадлежащий объекту с именем Person. Но почему-то это исключает исключение (xmlTeste.Person недоступен из-за уровня защиты. Можно обрабатывать только публичные типы.). Как я могу улучшить свой код? Ожидаемый результат - это файл xml, созданный с объектом Person.Проблема с уровнем защиты при сериализации

Объект Person:

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 
} 

Мой класс для управления XML-сериализации

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. 
    } 

} 

Использование:

 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 –

Смежные вопросы