Tre*_*ent 9 c# xml-serialization
这是我的目标
[Serializable()]
public class PersistentObject
{
public virtual int ID {
get { return id; }
protected set { id = value;}
}
...
}
Run Code Online (Sandbox Code Playgroud)
当我尝试将其序列化为xml时,我收到错误"无法在此上下文中使用属性或索引器PersistentObject.ID,因为set访问器不可访问".如果setter不存在,它可以正常工作.我希望将此ID保持为序列化,而不需要涉及ID上的[XmlIgnore()]的hacktastic解决方案.我更喜欢如果我只能在setter上添加[XmlIgnore()],但编译器会抱怨.有人有一个很好的解决方案吗?
Mar*_*ell 22
很不幸的是,不行.XmlSerializer有一些东西......刺激性.这是其中之一.选项:
DataContractSerializer(支持protected等,但不提供完整的xml控件)[XmlIgnore]- 没有错IXmlSerializable- 努力工作,很容易出错protected方法来设置值XmlSerializer允许您在运行时指定所有内容的构造函数; 大量的工作/维护,你需要手动缓存序列化程序(否则它会创建大量的动态程序集)即使它没有直接回答您的问题,请注意您可以使用internalsetter 序列化属性.为此,您需要使用Sgen.exe预生成XML序列化程序集,并使用以下InternalsVisibleTo属性将该程序集声明为"friend" :
[assembly:InternalsVisibleTo("MyAssembly.XmlSerializers")]
Run Code Online (Sandbox Code Playgroud)