我正在处理一个API,它偶尔会更改我接收到的XML上的命名空间。XML结构保持不变。我需要将XML反序列化为强类型模型。
无论XML上有什么命名空间,我该如何执行反序列化?
我之前使用了这样的模型:
[Serializable, XmlRoot(ElementName = "TestModel", Namespace = "http://schemas.datacontract.org/UnknownNamespace1")]
public class TestModel
{
public TestModel()
{
TestElements = new List<TestModelChildren>();
}
[XmlElement("TestModelChildren")]
public List<TestModelChildren> TestElements { get; set; }
}
我尝试使用以下代码将一些XML反序列化为该模型:
public TestModel DeserializeIt(XDocument xDoc)
{
TestModel result;
var serializer = new XmlSerializer(typeof(TestModel));
using(var sr = new StringReader(xDoc.ToString()))
{
result = (TestModel)serializer.Deserialize(sr);
}
return result;
}
我的问题是,偶尔会收到XML文件的命名空间发生改变。我可能会开始收到以下类似的XML:
<TestModel xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/UnknownNamespace2">
<TestModelChildren>
...
</TestModelChildren>
</TestModel>
我不想每次命名空间更改时都需要重新编译代码。我该怎么处理?