Tengo una clase de datos que se serializa con el DataContractSerializer
. La clase utiliza el atributo [DataContract]
sin declaración explícita Namespace
. Como tal, el espacio de nombres en el archivo xml resultante se genera en función del espacio de nombres de la clase.DataContractSerializer - cambiar el espacio de nombres y deserializar el archivo vinculado al antiguo espacio de nombres
La clase básicamente tiene el siguiente aspecto:
namespace XYZ
{
[DataContract]
public class Data
{
[DataMember(Order = 1)]
public string Prop1 { get; set; }
[DataMember(Order = 2)]
public int Prop2 { get; set; }
}
}
... y el XML resultante:
<?xml version="1.0" encoding="utf-8"?>
<Data xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/XYZ">
<Prop1>StringValue</Prop1>
<Prop2>11</Prop2>
</Data>
Ahora quieren cambiar el espacio de nombres de la clase (en realidad eliminarlo) cambiando el atributo [DataContract]
a [DataContract(Namespace = "")]
. Sin embargo, una vez que hago esto, cualquier archivo previamente serializado con el espacio de nombres original ya no se deserializa. Recibo la siguiente excepción:
Error in line 1 position XXX. Expecting element 'Data' from namespace ''.. Encountered 'Element' with name 'Data', namespace 'http://schemas.datacontract.org/2004/07/XYZ'.
Esto tiene mucho sentido. Cambié el espacio de nombres. Estoy bien con eso. Sin embargo, parece que debe haber una forma de decirle al DataContractSerializer
que continúe y deserialice esos datos aunque los espacios de nombres no coincidan.
¿Por qué quiere especificar una cadena vacía para un espacio de nombres en el atributo DataContract? ¿Qué estás ganando al hacer eso? –
Gano sin estar atada al espacio de nombres CLR de la clase; y ese es realmente el problema aquí. Esta clase está cambiando su espacio de nombre CLR y no quiero estar vinculado a ese detalle de implementación. Podría, por supuesto, definir un valor de espacio de nombres xml que pueda mantener constante. Pero para esta implementación no veo el beneficio de hacer eso, simplemente eliminar el espacio de nombres xml. Esto se está utilizando para la serialización simple de archivos. – harlam357