Сериализация объектов из XML

Программирование на Юнити.

Сериализация объектов из XML

Сообщение bablorub 08 апр 2010, 18:59

Долго искал сериализатор XML. Была задача из файла .xml создать экземпляр класса, в котором поля, указанные в .xml были бы уже заполнены значениями. Причем эти поля в классе могут быть экземплярами другого класса и т.д. Выкладываю пример решения такой задачи. Работает как часы.=)

Вот XML, который нужно сереализовать (ball.xml):
Синтаксис:
Используется xml
<?xml version="1.0" encoding="utf-8"?>
<Ball>
        <pos><x>1</x><y>11</y><z>3</z></pos>
        <smallball><test>123</test><pos>1222334</pos></smallball>
</Ball>
 


Далее приведу оба класса, экземпляры которых нужно заполнить. Создать нужно экземпляр класса Ball, в котором есть экземпляр подкласса Smallball

Синтаксис:
Используется csharp
using UnityEngine;
[System.Serializable]
public class Ball
{
    public Vector3 pos;
    public SmallBall smallball;
}
 


и подкласс Smallball:

Синтаксис:
Используется csharp
using UnityEngine;
[System.Serializable]

public class Smallball
{
    public string test;
    public float pos;
}
 


И. наконец, главный и простой класс сериализации:

Синтаксис:
Используется csharp
using UnityEngine;
using System.IO;
using System.Xml.Serialization;
using System;

public class Serializer : MonoBehaviour
{
    public Ball ball;        
    void Start()
    {
        XmlSerializer serial = new XmlSerializer(typeof(Ball));
        Stream reader = new FileStream(Application.dataPath + "/XML/Ball.xml", FileMode.Open);
        ball = (Ball)serial.Deserialize(reader);
    }    
}
 


В результате получаем экземпляр ball класса Ball, заполненный всеми значениями. указанными в файле .xml.
Последний раз редактировалось bablorub 16 апр 2010, 12:09, всего редактировалось 1 раз.
Аватара пользователя
bablorub
UNец
 
Сообщения: 8
Зарегистрирован: 12 янв 2010, 12:27
Откуда: Питер
  • ICQ

Re: Сериализация объектов из XML

Сообщение Aen Sidhe 09 апр 2010, 10:20

Serializable - необязательно указывать.

Также следует учесть, что в Xml будут сериализованы все публичные поля и свойства.

А ещё в пространстве имён System.Xml.XmlSerialization есть много полезных атрибутов.
Aen Sidhe
UNец
 
Сообщения: 5
Зарегистрирован: 24 мар 2010, 09:13


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13