我有一個數據類,它與DataContractSerializer
進行了序列化。該類使用[DataContract]
屬性,沒有明確的Namespace
聲明。因此,生成的xml文件中的命名空間是根據類的命名空間生成的。DataContractSerializer - 更改名稱空間並反序列化綁定到舊名稱空間的文件
類基本上是這樣的:
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
繼續並反序列化數據,即使命名空間不匹配。
爲什麼要爲DataContract屬性中的名稱空間指定空字符串?你在做什麼獲得什麼? –
我獲得的不是綁定到類的CLR名稱空間;這真的是這裏的問題。這個類正在改變它的CLR命名空間,我不想被綁定到那個實現細節。當然,我可以定義一個可以保持不變的xml命名空間值。但是對於這個實現,我看不到這樣做的好處,而不是簡單地刪除xml命名空間。這被用於簡單的文件序列化。 – harlam357