当前位置: 首页 > 编程语言 > C#

XmlSerializer属性转换器分享

时间:2023-04-10 23:01:26 C#

XmlSerializer属性转换器假设我们有一个类,可以通过XmlSerializer进行序列化/反序列化。它会是这样的:[XmlRoot("ObjectSummary")]publicclassSummary{publicstringName{get;set;}publicstringIsValid{get;set;}}我们有一个这样的xml:一些名字Y使用A布尔属性IsValid而不是字符串属性是一个更好的决定,但在这种情况下,我们需要添加一些额外的逻辑来将数据从字符串转换为布尔值。解决这个问题的简单直接的方法是使用不同的属性并将一些转换逻辑放在IsValidgetter中。谁能提出更好的决定?以某种方式在属性中使用类型转换器或类似的东西?将节点视为自定义类型:[XmlRoot("ObjectSummary")]publicclassSummary{publicstringName{get;set;}publicBoolYNIsValid{get;set;}}然后在自定义类型上实现IXmlSerializable:publicclassBoolYN:IXmlSerializable{publicboolValue{get;设置}#regionIXmlSerializable成员publicSystem.Xml.Schema.XmlSchemaGetSchema(){returnnull;}publicvoidReadXml(System.Xml.XmlReaderreader){stringstr=reader.ReadString();reader.ReadEndElement();switch(str){case"Y":this.Value=true;休息;案例“N”:this.Value=false;休息;}}publicvoidWriteXml(System.Xml.XmlWriterwriter){stringstr=this.Value?“是”:“否”;writer.WriteString(str);writer.WriteEndElement();}#endregion}您甚至可以将该自定义类更改为结构,并在其中提供bool之间的隐式转换并使其更加“透明”。我这样做的方式-不是最佳但没有找到更好的方式-是定义两个属性:[XmlRoot("ObjectSummary")]publicclassSummary{publicstringName{get;set;}[XmlIgnore]publicboolIsValid{get;set;}[XmlElement("IsValid")]publicstringIsValidXml{get{...};set{...};}}用简单的代码读取和写入Y和N的IsValid值并从中读取它。以上就是C#学习教程:XmlSerializer属性转换器分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: