Note sull'implementazione del supporto per il tipo XML
In questo argomento vengono descritti alcuni dettagli sull'implementazione di cui è consigliabile essere a conoscenza.
Mapping degli elenchi
I tipi IList, ICollection, IEnumerable, Type[] e String vengono usati per rappresentare i tipi di elenco XSD (XML Schema definition language).
Mapping delle unioni
I tipi di unione vengono rappresentati usando il tipo XmlAtomicValue o String. Pertanto, il tipo di origine o il tipo di destinazione devono sempre essere String o XmlAtomicValue.
Se l'oggetto XmlSchemaDatatype rappresenta un tipo di elenco, tale oggetto converte il valore della stringa di input in un elenco di uno o più oggetti. Se l'oggetto XmlSchemaDatatype rappresenta un tipo di unione, viene eseguito un tentativo di analisi del valore di input come tipo membro dell'unione. Se il tentativo di analisi non viene eseguito correttamente, viene tentata la conversione con il successivo membro dell'unione e così via fino a quando la conversione non viene eseguita correttamente o non sono disponibili altri tipi di membro con cui provare. In questo caso verrà generata un'eccezione.
Differenze tra i tipi di dati CLR e XML
Di seguito vengono descritte alcune corrispondenze errate che si possono verificare tra i tipi di dati CLR e i tipi di dati XML e la loro eventuale gestione.
Nota
Il prefisso xs
viene mappato in https://www.w3.org/2001/XMLSchema e nell'URI dello spazio dei nomi.
System.TimeSpan e xs:duration
Il tipo xs:duration
è parzialmente ordinato, poiché alcuni valori di durata sono diversi ma equivalenti. Ciò significa che per il tipo xs:duration
il valore di 1 mese (P1M) è minore di 32 giorni (P32D), maggiore di 27 giorni (P27D) ed equivalente a 28, 29 o 30 giorni.
La classe TimeSpan non supporta questo ordinamento parziale. Invece, stabilisce un numero specifico di giorni per 1 anno e 1 mese: rispettivamente 365 e 30 giorni.
Per altre informazioni sul tipo xs:duration
, vedere la raccomandazione W3C XML Schema Part 2: Datatypes (Schema XML parte 2: tipi di dati).
xs:time, tipi di date gregoriane e System.DateTime
Quando un valore xs:time
è associato a un oggetto DateTime, il campo MinValue viene usato per inizializzare le proprietà relative alla data dell'oggetto DateTime (ad esempio, Year, Month e Day) impostandole sul valore DateTime più basso possibile.
Allo stesso modo, anche istanze di xs:gMonth
, xs:gDay
, xs:gYear
, xs:gYearMonth
e xs:gMonthDay
vengono associate a un oggetto DateTime. Le proprietà inutilizzate nell'oggetto DateTime vengono inizializzate impostandole su quelle da MinValue.
Nota
Non è possibile usare il valore DateTime.Year quando il contenuto è tipizzato come xs:gMonthDay
. In questo caso il valore DateTime.Year è sempre impostato su 1904.
xs:anyURI e System.Uri
Quando un'istanza di xs:anyURI
che rappresenta un URI relativo viene associata a un tipo Uri, l'oggetto Uri non dispone di un URI di base.