【发布时间】:2018-09-11 07:39:03
【问题描述】:
我一直在使用DataContractJsonSerializer成功地将一个对象序列化为json。这样做的好处是我可以使用可选字段(可能会或可能不会被序列化)。例如
[DataContract()]
public class aClass
{
[DataMember()]
public int member1;
[DataMember()]
public int member2;
[DataMember(EmitDefaultValue=false)]
public int member3;
}
在这种情况下,当我实例化一个 aClass 类的对象时,我可以将 member1 设置为 1,将 member 2 设置为 2,将 member3 设置为 3。当我序列化它时,我得到了相应的 JSON 字符串。另一方面,如果我只设置 member1 和 member2,则序列化程序在生成 JSON 字符串时会忽略 member3。这非常有用,它不仅适用于整数,还适用于列表、对象等。
现在,我还没有尝试过,但我认为序列化程序将忽略 member3 不仅在未设置时,而且在设置为默认值时(在 int 情况下默认值为 0)。所以只要 member3 是 1 或 2 或 3,它就会被序列化。到目前为止,这是理想的行为。
我的问题来了。
我希望 member3 在设置为 0 或 1、2、3 时被序列化。否则不被序列化。 (例如未设置时)
这甚至可能吗?如何实现?
【问题讨论】:
-
数据协定序列化程序在一般情况下不支持条件序列化。有关解决方法,请参见例如How to conditionally avoid property from serializing in WCF? 或 Dynamically ignore data members from getting serialized
标签: c# json datacontractjsonserializer