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

XmlSerializer和可空属性共享

时间:2023-04-10 14:08:44 C#

XmlSerializer和可空属性我有一个包含许多可空属性的类,我想将其序列化为XML的属性。这显然是一个禁忌,因为它们被认为是“复杂类型”。因此,我实现了*Specified模式,我在其中创建了一个添加*Value和*Specified属性,如下所示:[XmlIgnore]publicint?年龄{得到{返回this.age;}设置{this.age=value;}}[XmlAttribute("age")]publicintAgeValue{get{returnthis.age.Value;}设置{this.age=value;}}[XmlIgnore]publicboolAgeValueSpecified{get{returnthis.age.HasValue;效果很好——如果“年龄”属性有一个值,它被序列化为一个属性。如果它没有价值,它就不会被序列化。问题是,正如我提到的,我的课堂上有很多Nullable-s,这种模式只会让事情变得混乱和难以管理。我希望有一种方法可以使Nullable更加友好XmlSerializer。或者,如果失败,那就是创建Nullable替换的方法。有谁知道我该怎么做?谢谢。在您的类上实现IXmlSerializable接口。然后,您可以处理特殊情况,例如ReadXML和WriteXML方法中的可空值。MSDN文档页面中有一个很好的示例。.类YourClass:IXmlSerializable{公共int?年龄{得到{返回this.age;}设置{this.age=value;}}//OTHERCLASSSTUFF//#regionIXmlSerializable成员publicvoidWriteXml(XmlWriterwriter){if(Age!=null){writer.WriteValue(Age)}}publicvoidReadXml(XmlReaderreader){Age=reader.ReadValue();}publicXmlSchemaGetSchema(){return(null);我遇到了一些事情,我正在处理一个类似的代码问题,我决定只对我正在序列化和反序列化的属性使用字符串。终于得到了这样的东西:以上就是C#学习教程的全部内容:XmlSerializer和nullable属性。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——[XmlAttribute("Age")]publicstringAge{get{if(this.age.HasValue)returnthis.年龄.Value.ToString();否则返回空;}set{if(value!=null)this.age=int.Parse(value);否则this.age=null;}}[XmlIgnore]公共int?年龄;本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: