如何在序列化为XML时可选地排除类成员

时间:2014-11-05 22:02:25

标签: c# xml serialization fedex

我刚刚接手了一个相当大的项目。我的任务之一是修改从FedEx获取费率报价的代码。目前,为了获得包含每个" ServiceType"的报价的一组费率报价。 (地面,2天,夜间等)代码为每种类型拨打一个电话。 FedEx提供用于获取此信息的Web服务。在做了一些研究之后,看起来这个Web服务可以通过一次往返返回多个ServiceType引号。为此,我应该将服务类型从请求中删除。" (Here's the question that pointed me in that direction。)

所以我知道我可以通过使用[System.Xml.Serialization.XmlIgnoreAttribute()]装饰属性来从序列化中排除服务类型属性。但是,只有当我想要所有ServiceType值的结果并且仍然能够为我知道用户想要的送货方法的情况下仍然能够传递单一服务类型时,我该怎么做?

编辑:FedEx的文档表明此字段是可选的。一些基本测试表明,使用XmlIgnoreAttribute从请求中排除它会返回多个ServiceTypes的数据。

1 个答案:

答案 0 :(得分:0)

如果在序列化的XXX属性旁边实现public bool ShouldSerializeXXX()函数,则当函数返回false时,XmlSerializer将忽略相应的XXX属性。你必须有一些基础来设置它(也许XXX属性可以为null?或者你可以抓住其他一些状态来做出决定。)

所以,沿着这些方向:

public class MyClass
{
    public ServiceType? ServiceType { get; set; }
    public bool ShouldSerializeServiceType() { return ServiceType.HasValue; }
}