Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/22: Рейтинг темы: голосов - 22, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 29.01.2012
Сообщений: 7
1

Ошибка при сериализации объекта с помошью XmlSerializer

29.01.2012, 18:54. Показов 4452. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток.
Работаю над созданием сетевого приложения клиент-сервер, одной из функций которого является передача файлов. При передаче должна использоваться сериализация информации о файле с последующей ее передачей, а затем и файла. Проблема состоит в том что сериализация не происходит. Пример который был найден в МСДН выдает следующую ошибку указывая на созданный сериализатор:

ConsoleApplication5.Program is inaccessible due to its protection level. Only public types can be processed

Вопрос в следующем, что я не так делаю? Пробовал кстати использовать функции set и get, результат не изменился. Заранее благодарен за ответы. Вот сам пример:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using System;
using System.IO;
using System.Xml.Serialization;
 
namespace ConsoleApplication5
{
    class Program
    {
        public class OrderedItem
        {
            public string ItemName;
            public string Description;
            public decimal UnitPrice;
            public int Quantity;
            public decimal LineTotal;
 
            // A custom method used to calculate price per item.
            public void Calculate()
            {
                LineTotal = UnitPrice * Quantity;
            }
        }
 
        public class Test
        {
            public static void Main(string[] args)
            {
                Test t = new Test();
                // Write a purchase order.
                t.SerializeObject("simple.xml");
            }
 
            private void SerializeObject(string filename)
            {
                Console.WriteLine("Writing With Stream");
 
                XmlSerializer serializer =
                new XmlSerializer(typeof(OrderedItem));
                OrderedItem i = new OrderedItem();
                i.ItemName = "Widget";
                i.Description = "Regular Widget";
                i.Quantity = 10;
                i.UnitPrice = (decimal)2.30;
                i.Calculate();
 
                // Create a FileStream to write with.
                Stream writer = new FileStream(filename, FileMode.Create);
                // Serialize the object, and close the TextWriter
                serializer.Serialize(writer, i);
                writer.Close();
            }
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.01.2012, 18:54
Ответы с готовыми решениями:

Ошибка XmlSerializer.XmlSerializer() недоступен из-за его уровня защиты
Ошбика XmlSerializer.XmlSerializer() недоступен из-за его уровня защиты, как исправить? нужно...

XmlSerializer: ошибка при десериализации
вот здесь вылезает ошибка XmlSerializer xmlser = new XmlSerializer(typeof(Obj)); ...

Ошибка при сериализации
При компиляции вылетает такая ошибка: Cannot create and instance of the abstract class or...

Ошибка при сериализации
случилось у меня такая ситуация, что есть у меня класс, который я успешно сериализовал, после...

6
5 / 5 / 3
Регистрация: 13.04.2010
Сообщений: 34
29.01.2012, 19:21 2
Я бы использовал, в данном случае, сериализацию в двоичный файл.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
        using System.Runtime.Serialization.Formatters.Binary;
            private void SerializeObject(string filename)
            {
                Console.WriteLine("Writing With Stream");
 
            OrderedItem i = new OrderedItem();
            i.ItemName = "Widget";
            i.Description = "Regular Widget";
            i.Quantity = 10;
            i.UnitPrice = (decimal)2.30;
            i.Calculate();
 
            using (Stream s = File.Create(filename + ".bin"))
            {
                var f = new BinaryFormatter();
 
                f.Serialize(s, i);
            }
            }
 
        public static void DeserializeObject(filename)
        {
OrderedItem i = new OrderedItem();
            // Если файл filename + ".bin" существует
            if (File.Exists(filename + ".bin"))
                using (Stream fs = new FileStream(filename + ".bin", FileMode.Open))
                {
                    var f = new BinaryFormatter();
 
                    i = (OrderedItem)f.Deserialize(fs);
                }
        }
0
0 / 0 / 0
Регистрация: 29.01.2012
Сообщений: 7
29.01.2012, 19:32  [ТС] 3
Спасибо, подумаю над двоичным форматом, правда именно данный пример мне не подходит так как такой штуки как VAR у меня нету(версию фреймворка не знаю но явно не последняя).
0
5 / 5 / 3
Регистрация: 13.04.2010
Сообщений: 34
29.01.2012, 19:40 4
var использовал для читабельности, это тоже самое
C#
1
BinaryFormatter f = new BinaryFormatter();
Добавлено через 2 минуты
И там ошибка у меня, метод в этом случае статичным должен быть
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
            private static void SerializeObject(string filename)
            {
                Console.WriteLine("Writing With Stream");
 
            OrderedItem i = new OrderedItem();
            i.ItemName = "Widget";
            i.Description = "Regular Widget";
            i.Quantity = 10;
            i.UnitPrice = (decimal)2.30;
            i.Calculate();
 
            using (Stream s = File.Create(filename + ".bin"))
            {
                var f = new BinaryFormatter();
 
                f.Serialize(s, i);
            }
            }
Но аналогично можно сделать и для нестатичного метода, как у вас.

Добавлено через 4 минуты
Кстати, быть может проблема в том, что метод void SerializeObject(string filename) у вас приватный?! Может достаточно просто присвоить ему модификатор доступа public ?!
0
0 / 0 / 0
Регистрация: 29.01.2012
Сообщений: 7
29.01.2012, 19:44  [ТС] 5
Пробовал я и так и сяк, модификаторы менял, примеры разные с открытыми классами пробовал, одна и та же ошибка. Буду пробовать как вы написали, может хоть так проблем не будет.
0
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,137
29.01.2012, 19:50 6
ArchangelMihail, пометьте класс Program как public, а то ону вас сейчас как internal и сериализатор не видит вложенные классы.
0
0 / 0 / 0
Регистрация: 29.01.2012
Сообщений: 7
29.01.2012, 19:58  [ТС] 7
спасибо большое, вроде мне казалось я уже везде модификаторы менял, попробовал и сериализация прошла, осталось проверить правильно ли, но это уже результат; вот как всегда банальная ошибка.
0
29.01.2012, 19:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2012, 19:58
Помогаю со студенческими работами здесь

Ошибка при сериализации Image
При серализации Image вылетает исключение: В GDI+ возникла ошибка общего вида. PS: Если вместо...

Ошибка при Xml сериализации
Возникает исключение при Xml сериализации. Собственно объект - ArrayList с объеками моего класса...

Ошибка при сериализации XML
возникает исключение при сериализации xml файла вот такого вида - <?xml version="1.0"...

Ошибка при сериализации класса AL7_Class_ExtFileInfo
Здравствуйте. Есть 2 класса. using System; using System.IO; namespace DH_Launcher { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru