Мое исправление заключается в предварительной обработке узлов, исправляя любые атрибуты "nil":
public static void FixNilAttributeName(this XmlNode @this)
{
XmlAttribute nilAttribute = @this.Attributes["nil"];
if (nilAttribute == null)
{
return;
}
XmlAttribute newNil = @this.OwnerDocument.CreateAttribute("xsi", "nil", "http://www.w3.org/2001/XMLSchema-instance");
newNil.Value = nilAttribute.Value;
@this.Attributes.Remove(nilAttribute);
@this.Attributes.Append(newNil);
}
Я связываю это с рекурсивным поиском дочерних узлов, чтобы для любого данного XmlNode (или XmlDocument) я мог выполнить один вызов перед десериализацией. Если вы хотите сохранить исходную структуру в памяти неизменной, работайте с Clone () из XmlNode.