这是我的对象


    [Serializable()]
    public class PersistentObject
    {
        public virtual int ID {
            get { return id; }
            protected set { id = value;}
        }
        ...
     }

当我尝试将其序列化为xml时,出现错误“由于无法访问集合访问器,因此无法在此上下文中使用Property或索引器PersistentObject.ID”。如果 setter 不存在,则可以正常工作。我想将此ID保持序列化,而没有涉及ID上[XmlIgnore()]的骇客解决方案。我希望仅在setter上添加[XmlIgnore()],但编译器会提示。有人对此有很好的解决方案吗?

最佳答案

抱歉不行。 XmlSerializer有一些令人讨厌的东西。这就是其中之一。选项:

  • 使用DataContractSerializer(它支持protected等,但是不提供完整的xml控制)
  • [XmlIgnore]注释-
  • 没错
  • 实现IXmlSerializable-努力工作,很容易出错
  • 取消设置程序,并使用单独的protected方法设置值
  • 使用XmlSerializer构造函数,该构造函数可让您在运行时指定所有内容;大量的工作/维护,并且您需要手动缓存序列化程序(否则它将创建大量的动态程序集)
  • 关于c# - 具有 protected 属性 setter 的Object Xml序列化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1751448/

    10-14 16:39
    查看更多