Сериализация объекта - замена значений - PullRequest
2 голосов
/ 21 июля 2010

У меня есть коллекция из примерно 20 000 объектов, которые необходимо сохранить в моей базе данных. Теперь вместо 20 000 операторов вставки я хочу передать все записи с использованием параметра XML.

Что касается сериализации объекта и передачи его в процедуру, у меня все готово. Однако мне интересно, есть ли у кого-нибудь элегантный способ сделать следующее:

В нашей базе кода C #; у нас есть некоторые статические значения, которые представляют NULL при сохранении в базе данных. Например, если целое число равно -1 или DateTime равно DateTime.MinValue; сохранить NULL. У нас есть собственная небольшая пользовательская реализация, которая обрабатывает это для нас при сохранении объектов.

Есть ли способ сделать что-то подобное при выполнении сериализации XML? Прямо сейчас он выводит -1 и DateTime.MinValue в XML. У меня есть метод расширения (IsNull()), который будет возвращать true / false, если сохраняемое значение является нулевым значением по умолчанию.

Есть предложения? Советы / хитрости?

Ответы [ 2 ]

0 голосов
/ 21 июля 2010

XmlSerializer понимает ряд различных атрибутов; один из них DefaultValueAttribute.

Если включено, XmlSerializer будет сериализовывать проверку значения только в том случае, если фактическое значение отличается от значения по умолчанию, поэтому все, что вам нужно, это:

[DefaultValue(-1)]
public int SomeProperty
{get;set;}

Кроме того, если вы еще не рассмотрели его, взгляните на класс SqlBulkCopy , который представляет собой высокопроизводительный подход к отправке большого количества записей на SQL Server.

0 голосов
/ 21 июля 2010

Вы можете реализовать IXmlSerializable для управления сериализацией XML объекта.В частности, реализуйте WriteXml для замены пустых или xsi:null значений (однако вы хотите это обработать) для тех свойств / полей, которые содержат значения нулевого значения.

...