Notas de implementação de suporte do tipo XML
Este tópico descreve alguns detalhes de implementação de que você deseja estar ciente.
Mapeamentos de lista
Os tipos IList, ICollection, IEnumerable, Type[] e String são usados para representar tipos de lista de XSD (linguagem de definição de esquema XML).
Mapeamentos de união
Os tipos de união são representados usando o tipo de XmlAtomicValue ou de String . O tipo de origem ou o tipo de destino portanto deve ser sempre String ou XmlAtomicValue.
Se o objeto de XmlSchemaDatatype representa um tipo de lista o objeto converte o valor da cadeia de caracteres de entrada em uma lista de um ou mais objetos. Se XmlSchemaDatatype representa um tipo de união então é feita uma tentativa de analisar o valor de entrada como um tipo de membro de união. Se a tentativa de análise falhar na conversão será tentada com o membro a seguir de união e assim por diante até que a conversão foi bem-sucedida, ou não há nenhum outro tipo do membro a tentar nesse caso, uma exceção é lançada.
Diferenças entre tipos de dados de CLR e XML
O exemplo a seguir descreve determinadas incompatíveis que podem ocorrer entre tipos de CLR e tipos de dados XML e como elas são tratadas.
Observação
O prefixo xs
é mapeado para o https://www.w3.org/2001/XMLSchema e o URI de namespace.
System.TimeSpan e xs:duration
O tipo de xs:duration
é ordenada parcialmente em que há determinados valores de duração que são diferentes mas equivalente. Isso significa que para o valor do tipo de xs:duration
como 1 mês (P1M) está menos de 32 dias (P32D), maior que 27 dias (P27D) e equivalente a 28, 29 ou 30 dias.
A classe de TimeSpan não suporta este pedido parcial. Em vez disso, escolher um número específico de dias para 1 e 1 ano mês; 365 dias e 30 dias respectivamente.
Para obter mais informações sobre o tipo xs:duration
, confira a Parte 2 do Esquema XML do W3C: recomendação de tipos de dados.
xs:time, tipos gregorianos de data, e System.DateTime
Quando um valor de xs:time
é mapeado para um objeto de DateTime , o campo de MinValue é usado para inicializar propriedades de data do objeto de DateTime (como Year, Month, e Day) para o valor possível com o menor de DateTime .
Da mesma forma, as instâncias de xs:gMonth
, xs:gDay
, xs:gYear
, xs:gYearMonth
e xs:gMonthDay
também são mapeados para um objeto de DateTime . As propriedades não usado no objeto de DateTime são inicializadas àquelas de MinValue.
Observação
Você não pode depender no valor de DateTime.Year quando o conteúdo está digitado como xs:gMonthDay
. O valor de DateTime.Year é sempre definido como 1904 nesse caso.
xs:anyURI e System.Uri
Quando uma instância de xs:anyURI
que representa o URL relativa é mapeada a Uri, o objeto de Uri não tem URI base.