Невозможно заставить XML Serializer игнорировать атрибуты xsi (если вы не внедрили IXmlSerializable и не настроили пользовательскую сериализацию или не использовали XmlAttributeOverrides ). Однако, единственный раз, когда xsi: attribute появляется, это когда у вас есть обнуляемый элемент. Если вам нужно использовать элементы, которые могут содержать значения NULL, вы можете, конечно, пост-обработать XML, чтобы удалить все xsi: вхождения. Однако, если вы сделаете это, подумайте о том, как вы будете десериализовать XML обратно в объект, если xsi: nil отсутствует в элементе, а элемент определен как целое число, допускающее обнуляемость, вы столкнетесь с исключением.
@ Чизо, поправьте меня, если я ошибаюсь.
У меня есть следующий код.
public class TestSer
{
public int? MyProperty { get; set; }
}
TestSer ser = new TestSer();
ser.MyProperty = null;
StringBuilder bldr = new StringBuilder();
var ns = new System.Xml.Serialization.XmlSerializerNamespaces();
ns.Add("", "");
XmlSerializer s = new XmlSerializer(typeof(TestSer));
using (StringWriter writer = new StringWriter(bldr))
{
s.Serialize(writer, ser, ns);
}
Я получаю следующий вывод.
<?xml version="1.0" encoding="utf-16"?>
<TestSer>
<MyProperty d2p1:nil="true" xmlns:d2p1="http://www.w3.org/2001/XMLSchema-instance" />
</TestSer>
Это не совсем элемент, как требует вопрос.