Ho una classe di dati che è serializzata con DataContractSerializer
. La classe utilizza l'attributo [DataContract]
senza esplicita dichiarazione Namespace
. In quanto tale, lo spazio dei nomi nel file xml risultante viene generato in base allo spazio dei nomi della classe.DataContractSerializer - modifica lo spazio dei nomi e deserializza il file associato allo spazio dei nomi precedente
La classe si presenta sostanzialmente in questo modo:
namespace XYZ
{
[DataContract]
public class Data
{
[DataMember(Order = 1)]
public string Prop1 { get; set; }
[DataMember(Order = 2)]
public int Prop2 { get; set; }
}
}
... e l'XML risultante:
<?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>
Ora voglio cambiare lo spazio dei nomi della classe (in realtà elimina) cambiando l'attributo [DataContract]
a [DataContract(Namespace = "")]
. Tuttavia, una volta eseguita questa operazione, qualsiasi file precedentemente serializzato con lo spazio dei nomi originale non viene più deserializzato. Ricevo la seguente eccezione:
Error in line 1 position XXX. Expecting element 'Data' from namespace ''.. Encountered 'Element' with name 'Data', namespace 'http://schemas.datacontract.org/2004/07/XYZ'.
Questo ha perfettamente senso. Ho cambiato lo spazio dei nomi. Sto bene con quello. Tuttavia, sembra che debba esserci un modo per dire allo DataContractSerializer
di andare avanti e deserializzare quei dati anche se gli spazi dei nomi non corrispondono.
Perché si desidera specificare una stringa vuota per uno spazio dei nomi nell'attributo DataContract? Cosa stai guadagnando facendo così? –
Guadagno non essere legato allo spazio dei nomi CLR della classe; e questo è davvero il problema qui. Questa classe sta cambiando il suo spazio dei nomi CLR e non voglio essere legato a questi dettagli di implementazione. Potrei, ovviamente, definire un valore di spazio dei nomi xml che potrei mantenere costante. Ma per questa implementazione non vedo il vantaggio di farlo semplicemente rimuovendo lo spazio dei nomi xml. Questo viene utilizzato per la serializzazione di file semplice. – harlam357