← Back

Сериализация

Добрый день, Михаил. Пытаюсь воспользоваться вашей сериализацией. Возникло несколько вопросов: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;
        }
    }

Comments (4)

Login or Create account, Log in or register to leave a comment

Mikhail Sukhov
Mikhail Sukhov

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

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

anothar
anothar Author

А XmlAttribute?

Mikhail Sukhov
Mikhail Sukhov

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

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

anothar
anothar Author

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