XML Сериализируют булевскую переменную как 0 и 1

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

24
задан e-sushi 2 December 2013 в 14:02
поделиться

3 ответа

Можно реализовать IXmlSerializable, который позволит Вам изменять сериализированный вывод своего класса однако, Вы хотите. Это повлечет за собой создание этих 3 методов GetSchema (), ReadXml (XmlReader r) и WriteXml (XmlWriter r). При реализации интерфейса эти методы называют вместо.NET, пытающейся сериализировать сам объект.

Примеры могут быть найдены в:

http://www.developerfusion.co.uk/show/4639/ и

http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx

3
ответ дан Wolfwyrd 28 November 2019 в 22:49
поделиться

Можно также сделать это при помощи некоторой черной магии атрибута XmlSerializer:

[XmlIgnore]
public bool MyValue { get; set; }

/// <summary>Get a value purely for serialization purposes</summary>
[XmlElement("MyValue")]
public string MyValueSerialize
{
    get { return this.MyValue ? "1" : "0"; }
    set { this.MyValue = XmlConvert.ToBoolean(value); }
}

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

55
ответ дан Sergey Metlov 28 November 2019 в 22:49
поделиться

Нет, не используя Систему по умолчанию. Xml. XmlSerializer: необходимо было бы изменить тип данных на интервал, чтобы достигнуть этого или слоняться без дела с обеспечением собственного кода сериализации (возможный, но не много забавы).

Однако можно просто выполнить последующую обработку сгенерированный XML вместо этого, конечно, или использующий XSLT, или просто использующий строковую замену. Определенный взлом, но довольно быстрый, и во время разработки и во время выполнения...

1
ответ дан mdb 28 November 2019 в 22:49
поделиться
Другие вопросы по тегам:

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