There is no way to force XML Serializer to ignore xsi attributes (unless you implement IXmlSerializable and force custom serialization or use XmlAttributeOverrides). However the only time xsi: attributes show up is when you have a nullable element. If you do need to use nullable elements you can of course post-process the XML to remove all xsi: occurences. However if you do this think about how you will deserialize the XML back into an object, if xsi:nil is missing on an element and the element is defined as a nullable integer you will run into an exception.
@Cheeso, please correct me if i am wrong.
I have the following code.
  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);
    }
I get the following output.
<?xml version="1.0" encoding="utf-16"?>
<TestSer>
  <MyProperty d2p1:nil="true" xmlns:d2p1="http://www.w3.org/2001/XMLSchema-instance" />
</TestSer>
This isn't exactly element only as the question asks for.