У меня есть класс данных, который сериализуется с помощью DataContractSerializer
. Класс использует атрибут [DataContract]
без явного объявления Namespace
. Таким образом, пространство имен в полученном XML файле создается на основе пространства имен класса.
Класс в основном выглядит следующим образом:
namespace XYZ
{
[DataContract]
public class Data
{
[DataMember(Order = 1)]
public string Prop1 { get; set; }
[DataMember(Order = 2)]
public int Prop2 { get; set; }
}
}
... и полученный xml:
<?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>
Теперь я хочу изменить пространство имен класса (фактически удалить его), изменив атрибут [DataContract]
на [DataContract(Namespace = "")]
. Однако, как только я сделаю это, любой файл, предварительно сериализованный с исходным пространством имен, больше не будет десериализован. Я получаю следующее исключение:
Error in line 1 position XXX. Expecting element 'Data' from namespace ''.. Encountered 'Element' with name 'Data', namespace 'http://schemas.datacontract.org/2004/07/XYZ'.
Это имеет смысл. Я изменил пространство имен. Я в порядке с этим. Однако, похоже, должен быть способ сообщить DataContractSerializer
продолжить и десериализовать эти данные, даже если пространства имен не совпадают.