Reputation: 2182
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?
Upvotes: 13
Views: 8347
Reputation: 292505
Even though it doesn't directly answer your question, note that you can serialize properties with an internal
setter. To do that, you need to pre-generate the XML serialization assembly with Sgen.exe, and declare that assembly as "friend" using the InternalsVisibleTo
attribute :
[assembly:InternalsVisibleTo("MyAssembly.XmlSerializers")]
Upvotes: 8
Reputation: 1063198
Unfortunately, no. XmlSerializer
has some things that are... irritating. This is one of them. Options:
DataContractSerializer
(which supports protected
etc, but doesn't offer full xml control)[XmlIgnore]
- nothing wrong with itIXmlSerializable
- hard work and very easy to get wrongprotected
method to set the valueXmlSerializer
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)Upvotes: 25