I have a complex object graph which I need to serialize to Xml. On each and every property I've added a custom attribute:
public class ExportLevelAttribute : Attribute
{
public ExportLevel[] Values { get; set; }
public ExportLevelAttribute (params ExportLevel[] values)
{
this.Values = values;
}
}
and on each property:
[ExportLevel(Simple, Normal, Detailed)]
public bool IsTest { get; set; }
[ExportLevel(Detailed)]
public SomeObject1 Property1 { get; set; }
[ExportLevel(Normal, Detailed)]
public SomeObject2 Property2{ get; set; }
The object graph is populated from corresponding database tables and there's no differentiation of the export level whilst populating, ie. all and any data in the tables is used to map to the object's properties.
It's the responsibility of the serializing method to determine which properties end up in the xml.
I looked at OnSerializing() and was wondering if it would work. Is it possible to access the property's attribute within the method? Or is there a better way to conditionally serialized properties?