Сериализация Dictionary<,> \ Hashtable

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

Сериализация Dictionary<,> \ Hashtable

Сообщение gnoblin 23 фев 2010, 13:08

Сериализуем Dictionary.
Как-то похоже наверное можно это сделать и для хештаблицы.

Единственнное что меня беспокоит - это наличие в тэгах мусора в духе
Код: Выделить всё
"xsi:type="xsd:string"
.

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

public class HashTest : MonoBehaviour
{
    public static void Serialize(TextWriter writer, IDictionary dictionary)
    {
        List<Entry> entries = new List<Entry>(dictionary.Count);
        foreach (object key in dictionary.Keys)
        {
            entries.Add(new Entry(key, dictionary[key]));
        }

        XmlSerializer serializer = new XmlSerializer(typeof(List<Entry>));

        //хак чтобы убрать xsi\xsd мусор?
        //XmlSerializerNamespaces xsn = new XmlSerializerNamespaces();
        //xsn.Add(String.Empty, String.Empty);
        //serializer.Serialize(writer, entries, xsn);

        serializer.Serialize(writer, entries);
    }

    public static void Deserialize(TextReader reader, IDictionary dictionary)
    {
        dictionary.Clear();
        XmlSerializer serializer = new XmlSerializer(typeof(List<Entry>));
        List<Entry> list = (List<Entry>)serializer.Deserialize(reader);

        foreach (Entry entry in list)
        {
            dictionary[entry.Key] = entry.Value;
        }
    }


    public void Start()
    {
        Dictionary<string,string> dict = new Dictionary<string,string>();
        dict.Add("button 1","Press here");
        dict.Add("button 2", "Play!");
        dict.Add("button 3", "Exit");

        TextWriter text_writer = new StreamWriter(@"d:\test_text.xml", false, Encoding.Unicode);
        HashTest.Serialize(text_writer, dict);
    }
}

//[System.ComponentModel.DefaultValueAttribute ("2002")]
//public string text;

public class Entry
{
    public object Key;
    public object Value;

    public Entry()
    {
    }

    public Entry(object key, object value)
    {
        Key = key;
        Value = value;
    }
}
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

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

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

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