Luc*_*uca 7 c# reflection xml-serialization
我发现如果可序列化的Field/Property有一个Boolean类型的相应字段,其字段名称为"Specified"后缀,则XmlSerializer有条件地从序列化过程中排除该Field/Property.太好了!
所以,我想避免这些字段的定义,并在运行时动态添加它们......
阅读本文,我发现了一个有趣的界面IReflect,我可以用它来"模拟"XmlSerializer实例用来排除某些字段的动态字段.
这会有用吗?
小智 6
我将扩展马丁·佩克的回答。您可以避免使用“指定”后缀对字段/属性进行序列化。您应该在类中定义“*Specified”属性并应用于[XmlIgnoreAttribute()]它们。
这是一个例子:
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://yournamespace.com")]
public partial class YourObject
{
private long sessionTimeoutInSecondsField;
private bool sessionTimeoutInSecondsFieldSpecified;
public long sessionTimeoutInSeconds
{
get
{
return this.sessionTimeoutInSecondsField;
}
set
{
this.sessionTimeoutInSecondsField = value;
}
}
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool sessionTimeoutInSecondsSpecified
{
get
{
return this.sessionTimeoutInSecondsFieldSpecified;
}
set
{
this.sessionTimeoutInSecondsFieldSpecified = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您想控制 xml 序列化,那么您有两个选择。第一个(此处可能不合适)使用 System.Xml.Serialization 命名空间中的属性来排除属性。如果您确实需要确定在运行时序列化的内容,这可能不是最好的做法。
另一种方法是在类上实现 IXmlSerialized 接口并实现 ReadXml 和 WriteXml 方法。这使您可以准确控制 xml 的外观。请参阅此问题以获取更多信息:
然而,正如这里提到的,混合自定义序列化和基本序列化?一旦实现 IXmlSerialized,您就需要负责您的类型的所有序列化逻辑。
| 归档时间: |
|
| 查看次数: |
6022 次 |
| 最近记录: |