Открытый класс - "недоступен из-за его уровня защиты. Можно обрабатывать только публичные типы".
Я делаю тестовый проект, чтобы узнать о сериализации XML объекта, и я получаю нечетную ошибку времени выполнения:
namespace SerializeTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void serializeConnection(Conn connection)
{
XmlSerializer serializer = new XmlSerializer(typeof(Conn));
TextWriter textWriter = new StreamWriter(@"serialized.xml");
serializer.Serialize(textWriter, connection);
textWriter.Close();
}
static List<Conn> deserializeConnection()
{
XmlSerializer deserializer = new XmlSerializer(typeof(List<Conn>));
TextReader textReader = new StreamReader(@"serialized.xml");
List<Conn> connectionList;
connectionList = (List<Conn>)deserializer.Deserialize(textReader);
textReader.Close();
return connectionList;
}
private void btnSerialize_Click(object sender, EventArgs e)
{
Conn conn = getConnection();
serializeConnection(conn);
}
private Conn getConnection()
{
Conn connection = new Conn();
connection.connectionName = txtName.Text;
connection.address = txtAddress.Text;
connection.height = 2542;
connection.width = 4254;
connection.password = txtPassword.Text;
connection.smartSizing = false;
connection.username = txtUsername.Text;
connection.port = 474;
return connection;
}
private void btnDeserialize_Click(object sender, EventArgs e)
{
int count = deserializeConnection().Count;
lblStatus.Text = "Count: " + count;
}
}
class Conn
{
public Conn()
{
}
public string connectionName { get; set; }
public int height { get; set; }
public int width { get; set; }
public string address { get; set; }
public string username { get; set; }
public string password { get; set; }
public int port { get; set; }
public bool smartSizing { get; set; }
}
}
Класс является общедоступным - я не понимаю, что может вызвать эту ошибку. Любая помощь будет оценена.
Ответы
Ответ 1
Класс является общедоступным
Нет, нет. Здесь декларация:
class Conn
{
...
}
Вы не указали какие-либо модификаторы доступа, поэтому по умолчанию используется internal
(предполагается, что он не вложен). Просто потому, что он получил публичный конструктор, он не делает его общедоступным. Вам нужно сделать это открыто:
public class Conn
{
...
}