Как Вы узнаете, когда Вы были загружены через Сериализацию XML?

Разбейте цвет в триплет значений, которые представляют красный, зеленый и синий. Чем выше шестнадцатеричное значение в каждом сегменте тогда, тем больше того цвета там. Таким образом, № 000000 является черным, #FF0000 является полностью красным, #FF00FF является фиолетовым и т.д.

14
задан abatishchev 26 May 2011 в 09:51
поделиться

2 ответа

Хммм ... это все еще некрасиво, но вы можете преобразовать логику десериализации в специальный класс, который может уведомить десериализованный объект о том, что он возник из XML, прежде чем вернуть его вызывающей стороне. Обновление: Я думаю, что это должно быть довольно легко сделать, не отклоняясь слишком далеко от шаблонов, заложенных фреймворком ... вам просто нужно убедиться, что вы используете CustomXmlSerializer. Классы, которым требуется это уведомление, просто должны реализовать IXmlDeserializationCallback

using System.Xml.Serialization;

namespace Custom.Xml.Serialization
{
    public interface IXmlDeserializationCallback
    {
        void OnXmlDeserialization(object sender);
    }

    public class CustomXmlSerializer : XmlSerializer
    {
        protected override object Deserialize(XmlSerializationReader reader)
        {
            var result = base.Deserialize(reader);

            var deserializedCallback = result as IXmlDeserializationCallback;
            if (deserializedCallback != null)
            {
                deserializedCallback.OnXmlDeserialization(this);
            }

            return result;
        }
    }
}
14
ответ дан 1 December 2019 в 12:39
поделиться

Сложно, поскольку XmlSerializer не поддерживает события обратного вызова сериализации. Есть ли способ использовать DataContractSerializer ? Это соответствует , но не t разрешить атрибуты (например, @name выше).

В противном случае; вы можете реализовать IXmlSerializable , но это много работы и очень подвержено ошибкам.

В противном случае - возможно, проверка вызывающей стороны через стек, но это очень ломкий и пахнет спелым.

1
ответ дан 1 December 2019 в 12:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: