Object XmlSerialization with protected property setters

c#, xml-serialization

Solution

Unfortunately, no. `XmlSerializer` has some things that are... irritating. This is one of them. Options:

- use `DataContractSerializer` (which supports `protected` etc, but doesn't offer full xml control)

- annotate with `[XmlIgnore]` - nothing wrong with it

- implement `IXmlSerializable` - hard work and very easy to get wrong

- take off the setter, and have a separate `protected` method to set the value

- use the `XmlSerializer` constructor that lets you specify everything at runtime; lots of work/maintenance, and you need to manually cache the serializer (otherwise it creates lots of dynamic assemblies)

Problem

Here is my object ``` [Serializable()] public class PersistentObject { public virtual int ID { get { return id; } protected set { id = value;} } ... } ``` When I try to serialize this to xml, I get an error "The Property or indexer PersistentObject.ID cannot be used in this context because the set accessor is inaccessible" . If the setter doesn't exist, it works fine. I want to keep this ID as serialized without a hacktastic solution that involves an of [XmlIgnore()] on ID. I would prefer if I could add [XmlIgnore()] on just the setter, but the compiler complains. Anybody have a good solution around this?

Original source