C# сериализация/десериализация - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming

Программирование / Programming
Ищете помощи в написании программы, есть сложность в выполнении задания (в институте и т.д.), пожалуйста, спросите у нас в данном форуме и мы обязательно вам поможем.

Ответ
Опции темы
Непрочитано 14.08.2016, 02:49   #1
Пользователь

Автор темы (Топик Стартер) C# сериализация/десериализация

Код:
   public class Test
    {
        [XmlAttribute]
        public int Id;
 
        public List<Test> Tests = new List<Test>();
    }
Code: C#
Код:
     
         
   using (var reader = XmlReader.Create("Test.xml"))
            {
                var serializer = new XmlSerializer(typeof(List<Test>));
                try
                {
                  var list = (List<Test>)serializer.Deserialize(reader);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
                reader.Close();
            }
Code: C#
Объяснить, почему, я не могу, из класса юзать Tests List<Test>();?
Откуда я сериализовал не хочу юзать, как мне быть?
Enfern вне форума Ответить с цитированием
Непрочитано 14.08.2016, 02:53   #2
Аватар для krisadr
Пользователь

По умолчанию Re: обьяснити

А не лучше ли для Списков использовать бинарную сериализацию?
Код:
using System;
using System.IO;
using System.Runtime.Serialization;
using static Utils.Logger;

namespace Utils
{
    public sealed class Serialize<T> : IDisposable
    {
        #region private
        #region vars
        IFormatter formatter;
        #endregion
        #region methods
        public bool save(T serObject, string serpath)
        {
            try
            {
                using (FileStream s = File.Create(serpath))
                {
                    formatter.Serialize(s, serObject);
                }
                //infoDebugS("Сериализируемый объект успешно сохранен.");
                return true;
            }
            catch(Exception e)
            {
                error("Ошибка при попытке сохранения объекта.", e);
                return false;
            }
        }
        public T restore(string serpath)
        {
            T newObject;
            try
            {
                using (FileStream s = File.OpenRead(serpath))
                {
                    newObject = (T)formatter.Deserialize(s);
                }
                //infoDebugS("Деcериализируемый объект успешно восстановлен.");
                return newObject;
            }
            catch(Exception e)
            {
                error("Ошибка при попытке востановления объекта.", e);
                return default(T);
            }
        }

        public void Dispose()
        {
            formatter = null;
        }
        #endregion
        #endregion

        #region public
        #region methods
        public Serialize(IFormatter formatter)
        {
            this.formatter = formatter;
        }
        #endregion
        #region get/set
        #endregion
        #endregion
    }
}
А тут инициализация

Код:
            Serialize<OrderedDictionary<string, Account>> sr = new Serialize<OrderedDictionary<string, Account>>(new BinaryFormatter());
потому что с бинарной у меня все работает отлично но вот xml сериализирует только поля тобишь только значение вот этой штуки сохранится...
Код:
        public string AccountName
        {
            get
            {
                return accountName;
            }
            set
            {
                accountName = value;
            }
        }
а это пропадет в небытие
Код:
 string somethink = "Hello dude";
krisadr вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 14.08.2016, 03:00   #3
Пользователь

Автор темы (Топик Стартер) Re: обьяснити

krisadr, хм, спасибо попробую
Enfern вне форума Ответить с цитированием
Непрочитано 14.08.2016, 03:52   #4
Аватар для ANZO
Разработчик BDO Emu

По умолчанию Re: обьяснити

Цитата:
Сообщение от Enfern Посмотреть сообщение
Код:
   public class Test
    {
        [XmlAttribute]
        public int Id;
 
        public List<Test> Tests = new List<Test>();
    }
 
    using (var reader = XmlReader.Create("Test.xml"))
            {
                var serializer = new XmlSerializer(typeof(List<Test>));
                try
                {
                  var list = (List<Test>)serializer.Deserialize(reader);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
                reader.Close();
            }
Code: C#
Объяснить, почему, я не могу, из класса юзать Tests List<Test>();?
Откуда я сериализовал не хочу юзать, как мне быть?
Потому что ересь какую-то написали.
Код:
 
    public class Test
    {
        [XmlAttribute]
        public int Id;
 
        [XmlArray(ElementName = "Tests")]
        [XmlArrayItem(ElementName = "Test")]
        public List<Test> Tests { get; set; }
    }
 
.........................
 
            using (var reader = XmlReader.Create("Test.xml"))
            {
                var serializer = new XmlSerializer(typeof(Test));
                try
                {
                  var testObject = (Test)serializer.Deserialize(reader);
                  var list = testObject.Tests;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }
 
Code: C#
ANZO вне форума Отправить сообщение для ANZO с помощью ICQ Отправить сообщение для ANZO с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 14.08.2016, 12:24   #5
Пользователь

Автор темы (Топик Стартер) Re: обьяснити

ANZO, Не подскажешь, как теперь записать обратно все это в хмл?
А то снова перемудрил блин

Код:
    public class TestSerializer
    {
        public static void Load()
        {
            using (var reader = XmlReader.Create("data\\New_Test.xml"))
            {
                var serializer = new XmlSerializer(typeof(Test), new XmlRootAttribute("TestData"));
                try
                {
                    var testObject = (Test)serializer.Deserialize(reader);
                    var list = testObject.Tests;

                    foreach (var Test in testObject.Tests)
                    {
                        Console.WriteLine("Test Id:  {0}", Test.Id);
                    }
                    Console.WriteLine("Tests Count: {0}", list.Count);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }
        }
    }
Код:
TestSerializer.Load();
var Test = new Test();
Console.WriteLine("Tests Count: {0}", Test.Tests.Count);
все равно ругается, в чем проблема у меня?
Дополнительные сведения: Ссылка на объект не указывает на экземпляр объекта.
Enfern вне форума Ответить с цитированием
Непрочитано 14.08.2016, 16:03   #6
Аватар для KID
Пользователь

По умолчанию Re: C# сериализация/десериализация

Код:
        static void Main(string[] args)
        {
            var entry = new Test()
            {
                Id = 123,
                Tests = new List<Test>()
                {
                    new Test()
                    {
                        Id = 124,
                    },
                    new Test()
                    {
                        Id = 125,
                    }
                }
            };

            var filename = "test.xml";
            var xmls = new XmlSerializer(typeof(Test));
            using(var file = File.Create(filename))
            {
                xmls.Serialize(file, entry);
            }

            using(var reader = new StreamReader(filename))
            {
                var result = xmls.Deserialize(reader) as Test;
                Console.WriteLine($"deserialized id: {result.Id} list:");
                foreach(var test in result.Tests)
                {
                    Console.WriteLine($"---------------: {test.Id}");
                }
            }

            Console.WriteLine("done");
            Console.ReadLine();
        }
Код:
    public class Test
    {
        [XmlAttribute]
        public int Id;

        [XmlArray]
        public List<Test> Tests;
    }
Аннотации не обязательны, они лишь влияют на структуру хранения данных в файле. поэксперементируй с ними и без
KID вне форума Отправить сообщение для KID с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 14.08.2016, 16:06   #7
Аватар для PROGRAMMATOR
Администратор

По умолчанию Re: обьяснити

Enfern, XmlSerializer.Serialize

Цитата:
Сообщение от Enfern Посмотреть сообщение
TestSerializer.Load();
var Test = new Test();
Что это и для чего? У вас объект testObject в методе Load, его верните.
__________________
composer require laravel/framework
yarn add vue
PROGRAMMATOR вне форума Отправить сообщение для PROGRAMMATOR с помощью ICQ Отправить сообщение для PROGRAMMATOR с помощью Skype™ Ответить с цитированием
Непрочитано 14.08.2016, 16:18   #8
Пользователь

Автор темы (Топик Стартер) Re: обьяснити

PROGRAMMATOR,
Хотелось, сделать так, загрузил, в класс занеслась информация.
Потом вызвать класса, считать данные что в нем хранится.

а получается так, что я могу только в TestSerializer получить информацию.
а без него уже, ничего хорошего.

Код:
  public class TestSerializer
    {
        public static Test testObject;

        public static Test Load()
        {
            using (var reader = XmlReader.Create("data\\New_Test.xml"))
            {
                var serializer = new XmlSerializer(typeof(Test), new XmlRootAttribute("TestData"));
                try
                {
                    testObject = (Test)serializer.Deserialize(reader);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }
            return testObject;
        }
    }
Enfern вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
десериализация PropertyType.Matrix i_am_kisly Игровой клиент 5 08.07.2015 09:57
Файл данных и сериализация Gattsu Java 5 03.08.2012 19:15


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 00:50. Часовой пояс GMT +3.

Вверх