Object XmlSerialization with protected property setters

后端 未结 2 1920
我在风中等你
我在风中等你 2021-02-14 09:00

Here is my object


    [Serializable()]
    public class PersistentObject
    {
        public virtual int ID {
            get { return id; }
            protec         


        
相关标签:
2条回答
  • 2021-02-14 09:21

    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)
    0 讨论(0)
  • 2021-02-14 09:39

    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")]
    
    0 讨论(0)
提交回复
热议问题