Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Можно реализовать 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
Можно также сделать это при помощи некоторой черной магии атрибута 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.
Нет, не используя Систему по умолчанию. Xml. XmlSerializer: необходимо было бы изменить тип данных на интервал, чтобы достигнуть этого или слоняться без дела с обеспечением собственного кода сериализации (возможный, но не много забавы).
Однако можно просто выполнить последующую обработку сгенерированный XML вместо этого, конечно, или использующий XSLT, или просто использующий строковую замену. Определенный взлом, но довольно быстрый, и во время разработки и во время выполнения...