Как исключить пустые свойства при использовании XmlSerializer

Обновление (19.09.2008 10:05) - Решение:

Мое Решение: Социальная инженерия, я вырыл очень трудно и нашел кого-то, кто знал название схемы.
Техническое решение: Поиск .dmp файла сделал , приводят к названию схемы.
, Как только я знал название схемы, я искал файл дампа и изучил, где найти его.

Места, которые называют Схемы, были замечены в .dmp файле:

  • <OWNER_NAME>SOURCE_SCHEMA</OWNER_NAME> Это было замечено перед каждым именем таблицы / определение.

  • SCHEMA_LIST 'SOURCE_SCHEMA' Это было замечено около конца .dmp.

Интересно достаточно, вокруг эти SCHEMA_LIST 'SOURCE_SCHEMA' раздел, этому также использовали командную строку для создания дампа, используемые каталоги, используемые файлы паритета, версия для Windows, на этом работали, и настройки сессии экспорта (язык, форматы даты).

Так, проблема решила:)

32
задан Allen Rice 7 October 2009 в 18:29
поделиться

3 ответа

Я полагаю, вы могли бы создать XmlWriter, который отфильтровывает все элементы с атрибутом xsi: nil и передает все остальные вызовы базовому истинному писателю.

6
ответ дан 27 November 2019 в 20:56
поделиться

Самый простой способ написать такой код, в котором важен точный вывод:

  1. Напишите схему XML, описывающую точный желаемый формат.
  2. Преобразуйте схему в класс, используя xsd.exe .
  3. Преобразуйте ваш класс обратно в схему (снова используя xsd.exe ) и сравните его с исходной схемой, чтобы убедиться, что сериализатор правильно воспроизвел каждое поведение вы хотите.

Настраивайте и повторяйте, пока не получите рабочий код.

Если вы не уверены в том, какие именно типы данных нужно использовать изначально, начните с шага 3 вместо шага 1, затем настройте.

IIRC, для В вашем примере вы почти наверняка получите свойства Specified , как вы уже описали, но создание их для вас наверняка будет лучше, чем написание их вручную. : -)

0
ответ дан 27 November 2019 в 20:56
поделиться

Вы игнорируете определенные элементы со спецификацией

public MyClass
{
    public int? a { get; set; }

    [System.Xml.Serialization.XmlIgnore]
    public bool aSpecified { get { return this.a != null; } }

    public int? b { get; set; }
    [System.Xml.Serialization.XmlIgnore]
    public bool bSpecified { get { return this.b != null; } }

    public int? c { get; set; }
    [System.Xml.Serialization.XmlIgnore]
    public bool cSpecified { get { return this.c != null; } }
}

Указанные свойства {field} сообщают сериализатору, следует ли ему сериализовать соответствующие поля или нет, возвращая истину / ложь.

33
ответ дан 27 November 2019 в 20:56
поделиться
Другие вопросы по тегам:

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