0

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?

Ivan-Mark Debono
  • 15,500
  • 29
  • 132
  • 263
  • Only public properties get serialized so you make make properties that you do not want in xml private. – jdweng Sep 01 '18 at 07:45
  • @jdweng All properties must be public because, depending on the attribute, some will not be exported according to that condition. – Ivan-Mark Debono Sep 01 '18 at 10:01
  • In other cases, those same properties might be exported. – Ivan-Mark Debono Sep 01 '18 at 10:08
  • `XmlSerializer` already has a couple of mechanisms that support conditional serialization, see [ShouldSerialize*() vs *Specified Conditional Serialization Pattern](https://stackoverflow.com/q/37838640). Could either of those meet your needs? – dbc Sep 02 '18 at 18:38

0 Answers0