Tôi có một lớp dữ liệu được tuần tự hóa với DataContractSerializer
. Lớp học sử dụng thuộc tính [DataContract]
không có khai báo rõ ràng Namespace
. Như vậy, không gian tên trong tệp xml kết quả được tạo ra dựa trên không gian tên của lớp.DataContractSerializer - thay đổi không gian tên và deserialize tập tin bị ràng buộc vào không gian tên cũ
Lớp cơ bản trông như thế này:
namespace XYZ
{
[DataContract]
public class Data
{
[DataMember(Order = 1)]
public string Prop1 { get; set; }
[DataMember(Order = 2)]
public int Prop2 { get; set; }
}
}
... và xml kết quả:
<?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>
Bây giờ tôi muốn thay đổi không gian tên của lớp (trên thực tế loại bỏ nó) bằng cách thay đổi thuộc tính [DataContract]
đến [DataContract(Namespace = "")]
. Tuy nhiên, một khi tôi làm điều này bất kỳ tập tin trước đó được tuần tự hóa với không gian tên ban đầu không còn deserialize. Tôi nhận được ngoại lệ sau:
Error in line 1 position XXX. Expecting element 'Data' from namespace ''.. Encountered 'Element' with name 'Data', namespace 'http://schemas.datacontract.org/2004/07/XYZ'.
Điều này có ý nghĩa hoàn hảo. Tôi đã thay đổi không gian tên. Tôi ok với điều đó. Tuy nhiên, có vẻ như phải có một cách để nói cho các DataContractSerializer
để đi trước và deserialize rằng dữ liệu ngay cả khi các không gian tên không phù hợp.
Tại sao bạn muốn chỉ định chuỗi trống cho một không gian tên trong thuộc tính DataContract? Bạn đang đạt được điều gì bằng cách làm điều đó? –
Tôi không bị ràng buộc với không gian tên CLR của lớp; và đó thực sự là vấn đề ở đây. Lớp này đang thay đổi không gian tên CLR của nó và tôi không muốn bị ràng buộc với chi tiết triển khai đó. Tôi có thể, tất nhiên, xác định một giá trị không gian tên xml mà tôi có thể giữ liên tục. Nhưng đối với việc thực hiện này, tôi không thấy lợi ích của việc đó so với việc loại bỏ không gian tên xml. Điều này đang được sử dụng cho serialization file đơn giản. – harlam357