You can create a function with the pattern ShouldSerialize{PropertyName} which tells the XmlSerializer if it should serialize the member or not.
For example, if your class property is called MyNullableInt you could have
public bool ShouldSerializeMyNullableInt() 
{
  return MyNullableInt.HasValue;
}
Here is a full sample
public class Person
{
  public string Name {get;set;}
  public int? Age {get;set;}
  public bool ShouldSerializeAge()
  {
    return Age.HasValue;
  }
}
Serialized with the following code
Person thePerson = new Person(){Name="Chris"};
XmlSerializer xs = new XmlSerializer(typeof(Person));
StringWriter sw = new StringWriter();
xs.Serialize(sw, thePerson);
Results in the followng XML - Notice there is no Age
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name>Chris</Name>
</Person>
    Additionally to what Chris Taylor wrote: if you have something serialized as an attribute, you can have a property on your class named {PropertyName}Specified to control if it should be serialized. In code:
public class MyClass
{
    [XmlAttribute]
    public int MyValue;
    [XmlIgnore]
    public bool MyValueSpecified;
}
    It exists a property called XmlElementAttribute.IsNullable 
If the IsNullable property is set to true, the xsi:nil attribute is generated for class members that have been set to a null reference.
The following example shows a field with the XmlElementAttribute applied to it, and the IsNullable property set to false.
public class MyClass
{
   [XmlElement(IsNullable = false)]
   public string Group;
}
You can have a look to other XmlElementAttribute for changing names in serialization etc.
You can define some default values and it prevents the fields from being serialized.
    [XmlElement, DefaultValue("")]
    string data;
    [XmlArray, DefaultValue(null)]
    List<string> data;
    
                If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With