如何根据来自XmlSerializer的值忽略属性我想让XmlSerializer创建的XML排除有默认值的属性。这可能与XmlSerializer还是我必须查看IXmlSerializable?例如,我可能有以下类:publicclassPositionedObject{publicfloatX{get;放;}publicfloatY{get;set;}}我想告诉XmlSerializer,在序列化PositionedObject的实例时,如果值为0,则它不包括X(如果为0,则与Y相同)。只需声明一个名为ShouldSerializeX的方法,该方法在值不为0时返回true:publicboolShouldSerializeX(){returnX!=0;序列化程序将调用此方法来决定是否应序列化该属性。另一个支持的XmlSerializer模式;[DefaultValue({whatever})]publicSomeTypeSomeProperty{get;set;}但是注意无参构造函数必须指定这个值,否则会出现不可预知的结果。您的类可以实现IXmlSerializable并在WriteXml方法中选择不使用您认为是默认值的属性序列化。公共类PositionedObject:IXmlSerializable{publicvoidWriteXml(System.Xml.XmlWriterwriter){if(Position!=DefaultPosition)writer.WriteAttributeString("Position",Position);在你的位置是floatpair,你可能不得不使用Thomas的一些容差方式,这可能是做你想做的最简单的方法。但是,您可能需要考虑到技术值类型总是有一个值,您可能应该将其序列化。请注意,如果您将XmlSerializer声明为字符串或其他引用类型,则XmlSerializer将跳过添加X元素。当然,将X坐标声明为字符串会很愚蠢,但您可以将其声明为可为null的浮点数吗?并且它将序列化为,这可能更接近您实际想要的...除非您只是想让您的XML看起来漂亮,然后从Thomas那里获得建议。以上就是C#学习教程:如何根据XmlSerializer的值忽略所有属性共享的内容。侵权请点击右侧联系管理员删除。如需转载请注明出处:
