Сериализация
Atom
16.11.2010
anothar


Добрый день, Михаил. Пытаюсь воспользоваться вашей сериализацией. Возникло несколько вопросов:1) как объявить XML-атрибут. 2)как объявить корень сериализации( то есть название типа) 3) есть ли у Вас какая-нить документация по вашей сериализации. Пришлось отказаться от родного XmlSerializer ибо как я узнал он не умеет десериализовать типы типа internal. Вот пример моего кода:


 [XmlRoot(ElementName = "result")]
    public class CommandResult
    {
        private static XmlSerializer _serializer;

        protected static XmlSerializer Serializer
        {
            get
            {
                if (_serializer == null)
                {
                    _serializer = new XmlSerializer(typeof(CommandResult));
                }
                return _serializer;
            }
        }

        [XmlAttribute("success")]
        public bool Success
        {
            get;
            set;
        }

        [XmlAttribute("transactionid")]
        public String TransactionId
        {
            get;
            set;
        }

        [XmlElement("message")]
        public String Message
        {
            get;
            set;
        }

        [XmlIgnore]
        public int? Difference
        {
            get;
            set;
        }

        [XmlAttribute("diff")]
        public String DifferenceAsString
        {
            get
            {
                if (Difference == null) return null;
                else
                    return ((int)Difference).ToString();
            }
            set
            {
                if (value == null) Difference = null;
                else
                    Difference = int.Parse(value);
            }

        }

        public static CommandResult FromXmlString(String s)
        {
            s = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + s;
            XmlSerializer serializer = Serializer;
            MemoryStream str = new MemoryStream(Encoding.UTF8.GetBytes(s));
            CommandResult result = (CommandResult)serializer.Deserialize(str);
            str.Close();
            return result;
        }
    }


Теги:


Спасибо:


Mikhail Sukhov

Фотография
Дата: 17.11.2010
Ответить


XmlRootAttribute == EntityAttribute. XmlElementAttribute == FieldAttribute XmlIgnoreAttribute == IgnoreAttribute

var serializer = new XmlSerializer(); serializer.Deserialize(serializer.Serialize(new CommandResult());

Спасибо:

anothar

Фотография
Дата: 17.11.2010
Ответить


А XmlAttribute?

Спасибо:

Mikhail Sukhov

Фотография
Дата: 18.11.2010
Ответить


Андрей Ефимов: А XmlAttribute?

Увы нет. Умеет только в ноды сериализовать.

Спасибо:

anothar

Фотография
Дата: 18.11.2010
Ответить


Печально :( Придется как-нить пошаманить...

Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy