Контекстная XmlSerialization - PullRequest
       8

Контекстная XmlSerialization

2 голосов
/ 24 октября 2011

Есть ли способ контролировать сериализацию XML для ex.проверка свойств в корневом / родительском объекте.

У меня есть:

class ClassA
{
    public int SomeAIntProp {get; set; }

    ClassB OtherClass;
}

class ClassB
{
    public int SomeBIntProp {get; set; }
}

Это то, что я хочу:

public bool ShouldSerializeSomeBIntProp(context) 
{ 
    return (context is ClassA) && ((ClassA)context).SomeAIntProp >10; 
} 

}

Ответы [ 2 ]

1 голос
/ 24 октября 2011

Нет ни в одном из стандартных / встроенных сериализаторов, нет.Вся логика должна относиться к сериализуемому экземпляру (вы можете, конечно, пройтись по любым уже существующим навигационным свойствам - .Parent и т. Д., Хотя это должно быть отмечено [XmlIgnore]).Единственный другой вариант - реализовать IXmlSerializable и сделать все вручную, но я настоятельно не рекомендую.

0 голосов
/ 24 октября 2011

Не делайте этого в Serialization, а просто добавьте в свой класс функцию, которая сначала проверяет содержимое, которое будет сохранено, а затем вызывает конкретную функцию сериализации.

Если у вас есть более одного объекта, который необходимо объединить и сохранить в одном файле, а также провести некоторую перекрестную проверку для различных типов объектов, участвующих в сериализации, вы можете или реализовать SerializationAdapter (что ваш пользовательский класс должен объединять, проверять и сериализовать объекты, представляющие интерес), или использовать Цепочка ответственности , если это возможно в вашем случае, когда у вас есть набор функций, которые вы можете передать объектами будет проверена, и некоторая конечная функция, которая проверяет окончательный результат всех функций на всех нужных вам объектах.Более или менее похоже на то, что ваши объекты - это пациент (ы), а функции проверки - врачи, и, наконец, вы получили квитанцию, которая на основе каждого отдельного анализа сообщает о вашем конечном результате.

Надеюсь, это поможет.

...