Пример xml сбивает с толку, потому что в большинстве случаев сериализатор будет пропускать нули, особенно для атрибутов. Исключением является Nullable<T>
при использовании с элементами, например:
[XmlElement("job")]
public int? Job { get; set; }
Может привести к:
<user ...>
<job xsi:nil="true" />
</user>
Что опять же очень отличается от вашего примера xml. В общем случае можно управлять сериализацией несколькими способами:
-
IsNullable
свойство [XmlElement]
- добавление
[DefaultValue]
- добавление
public bool ShouldSerialize{propname}() {...}
метода
- добавление
[XmlIgnore] public bool {propname}Specified {get {...} set {...}}
свойства
Тем не менее, без повторяемого примера, с которым можно сравнить ваш пример, невозможно ответить полностью.
Re обновленный вопрос; это должно выполнить это, но не ясно, каковы эти другие свойства (которые вы не хотите показывать, если ноль).
[Serializable, XmlRoot("user")]
public partial class User
{
[XmlAttribute("id")]
public int Id {get;set;} // snipped more complex property implementation
[XmlAttribute("name")]
public string Username {get;set;} // ditto
}