Compartilhar via


Notas de implementação de suporte de tipo XML

Este tópico descreve alguns detalhes de implementação dos quais você deseja estar ciente.

Mapeamentos de lista

Os tipos IList, ICollection, IEnumerable, Tipo[], e String são usados para representar tipos de lista da linguagem de definição de esquema XML (XSD).

Mapeamentos de união

Os tipos de união são representados usando o tipo XmlAtomicValue ou String. O tipo de origem ou o tipo de destino deve, portanto, ser sempre um String ou XmlAtomicValue.

Se o XmlSchemaDatatype objeto representar um tipo de lista, o objeto converterá o valor da cadeia de caracteres de entrada em uma lista de um ou mais objetos. Se XmlSchemaDatatype representar um tipo união, uma tentativa será feita para analisar o valor de entrada como um tipo membro da 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 CLR e XML

A seguir, descreve determinadas incompatibilidades que podem ocorrer entre tipos 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 xs:duration tipo é parcialmente ordenado porque há determinados valores de duração diferentes, mas equivalentes. Isso significa que para o valor do tipo xs:duration, como um mês (P1M), é menor que 32 dias (P32D), maior que 27 dias (P27D) e equivalente a 28, 29 ou 30 dias.

A TimeSpan classe não dá suporte a essa ordenação parcial. Em vez disso, ele escolhe um número específico de dias para 1 ano e 1 mês; 365 dias e 30 dias, respectivamente.

Para obter mais informações sobre o xs:duration tipo, consulte o esquema XML W3C Parte 2: Recomendação de tipos de dados.

xs:time, tipos gregorianos de data, e System.DateTime

Quando um xs:time valor é mapeado para um DateTime objeto, o MinValue campo é usado para inicializar as propriedades de data do DateTime objeto (como Year, Monthe Day) para o menor valor possível DateTime .

Da mesma forma, instâncias de xs:gMonth, xs:gDaye xs:gYearxs:gYearMonthxs:gMonthDay também são mapeadas para um DateTime objeto. As propriedades não utilizados no DateTime objeto são inicializadas para as de MinValue.

Observação

Você não pode confiar no DateTime.Year valor quando o conteúdo é digitado como xs:gMonthDay. O DateTime.Year valor é sempre definido como 1904 nesse caso.

xs:anyURI e System.Uri

Quando uma instância que xs:anyURI representa um URI relativo é mapeada para um Uri, o Uri objeto não tem um URI base.

Consulte também