XML сериализация и ошибка "Класс недоступен в силу его уровня защиты" - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Пишу XML сериализацию и сталкнулся с проблемой. Для того, чтобы объяснить суть создал маленький проект. Class2
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Serial
{
    class Class2 : Class1
    {
        public Class2()
        {
        }
        public override List<char> Data
        {
            get { return L; }
            set { L = value; }
        } 
    }
}
Class1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Serial
{
    
    abstract class Class1
    {
        protected List<char> L = new List<char>();
        public Class1()
        {
            L.Add('a');
            L.Add('c');
            L.Add('a');
        }
        abstract public List<char> Data
        {
            get;
            set;
        }
    }
}
Program
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Collections;
using System.Xml.Serialization;

namespace Serial
{
    class Program
    {
        static void Main(string[] args)
        {
            short a;
            List<Class1> obj= new List<Class1>();
            
            obj.Add(new Class2());
            
            string FileName = "data.xml";
 
            a = short.Parse(Console.ReadLine());
 
            if (a == 1)
            {
                XmlSerializer mySerializer = new XmlSerializer(typeof(List<Class1>)); // Здесь ошибка в рантайме
                StreamWriter myWriter = new StreamWriter(FileName);
                mySerializer.Serialize(myWriter, obj);
                myWriter.Close();
            }
 
            else
            {
                XmlSerializer mySerializer = new XmlSerializer(typeof(List<Class1>));
                FileStream myFileStream = new FileStream(FileName, FileMode.Open);
                obj = (List<Class1>)mySerializer.Deserialize(myFileStream);
                obj[0].Data.ForEach(delegate(char c)
                {
                    Console.WriteLine(c);
                });
                Console.ReadKey();
            }
        }
    }
}
Ошибка
Serial.Class1 недоступен в силу его уровня защиты. Возможна обработка только общих типов.
Смысл в том, что мне нужно сохранить именно List<Class1>. Что именно я делаю не так?

Решение задачи: «XML сериализация и ошибка "Класс недоступен в силу его уровня защиты"»

textual
Листинг программы
obj = (List<Class1>)mySerializer.Deserialize(myFileStream);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.375 из 5
Похожие ответы