如何在DataContract中使用条件DataMember?

时间:2014-03-13 15:10:06

标签: c# asp.net xml asp.net-web-api datacontractserializer

从给定的DataContract我想只显示Benefits的一个XML节点。 因为,有一次,3个DataMembers房屋,汽车和股票中只有一个不会为空。

public class WebAPIModel 
{
    [DataMember(Name = "Benefits")]
    public List<House> Houses { get; set; }
    [DataMember(Name = "Benefits")]
    public List<Car> Cars { get; set; }
    [DataMember(Name = "Benefits")]
    public List<Share> Shares { get; set; }     
}

(显然目前这不起作用)

如何使结果XML只显示一个节点Benefits

我尝试了类似......

    // Since only one property is not null at one time 
    // I thought EmitDefaultValue will do the trick .. but it doesn't
    [DataMember(Name = "Benefits", EmitDefaultValue = false)]

1 个答案:

答案 0 :(得分:0)

如果是序列化,EmitDefaultValue = false就足够了。

出于显示目的:

创建一个名为&#34; Benefits&#34;的新属性,将其标记为非数据成员,实现getter。

它可能必须是通用类型,Car,Share等的共同祖先。 作为另一种选择,您可以定义新类型并在访问此新属性时动态生成其实例。

如果这种带有新属性的方法适合您,也可以考虑在仅存在于客户端应用程序中的扩展类中实现它,以减少服务器端的混乱。