К сожалению, XmlSerializer
предназначен для создания XML-описаний с использованием стандартной XML-схемы;которые были в структуре во время фазы .Net 1.0 (что означает xs: целое число не поддерживается).
IXmlSerializable
Вы будетенеобходимо изменить класс BigInteger
и добавить к нему интерфейс IXmlSerializable
.Если вам нужно использовать циклическое отключение XSD (например, ссылки на WebService), это может вызвать проблемы.
public class BigInteger : IXmlSerializable
{
public int Value;
public System.Xml.Schema.XmlSchema GetSchema()
{
// You should really a create schema for this.
// Hardcoded is fine.
return null;
}
public void ReadXml(System.Xml.XmlReader reader)
{
Value = int.Parse(reader.ReadString());
}
public void WriteXml(System.Xml.XmlWriter writer)
{
writer.WriteValue(Value.ToString());
}
}
Свойство Proxy (хотя похоже, что оно имеет запах кодаэто гораздо более переносимо)
Создайте новое свойство с поддерживаемым типом схемы (наиболее вероятно, xs: string) и скройте его от intellisense.
[XmlRoot("foo")]
public class SerializePlease
{
[XmlIgnore]
public BigInteger BigIntValue;
[XmlElement("BigIntValue")]
[EditorBrowsable(EditorBrowsableState.Never)]
public string BigIntValueProxy
{
get
{
return BigIntValue.ToString();
}
set
{
BigIntValue = BigInteger.Parse(value);
}
}
}