DataMember发出默认值

时间:2011-05-04 11:33:55

标签: asp.net json datamember

我有一个可以接受一个字符串的.Net Web服务功能。

然后该函数将该字符串序列化为JSON,但我只想序列化它,如果它的值不是“”。

我找到了这些说明:

http://msdn.microsoft.com/en-us/library/aa347792.aspx

[DataContract]
public class MyClass
{
   [DataMember (EmitDefaultValue=false)]
   public string myValue = ""
}

不幸的是我无法隐藏序列化中的myValue,因为“”不是字符串的.Net默认值(这是多么愚蠢!)

两个选项之一

  1. 在Web服务上有某种属性将“”设置为null

  2. 在课堂上有一些条件

  3. 我更喜欢第一种,因为它使代码更清晰,但意见会很棒。

    由于

2 个答案:

答案 0 :(得分:6)

您可以使用DefaultValueAttribute类显式设置默认值(用于序列化):

[DataContract]
public class MyClass
{
    [DataMember (EmitDefaultValue=false)]
    [DefaultValue("")]
    public string myValue = ""
}

答案 1 :(得分:0)

我认为你至少有几个选择。这是额外的工作,但值得。

  • 您可以将字符串封装在引用类型中。由于引用类型如果不存在则为null,这可以让您立即知道字符串是否存在(因为封装引用类型将为非null或null,如果字符串非空或不存在。)

  • 最后一个选项是添加一个额外的互补变量(可能是一个布尔值),该变量在OnDeserializing / OnDeserialized / OnSerializing / OnSerialized上设置,并用它来跟踪线路上是否存在某些东西。例如,您可能只有在实际序列化非空字符串时才将此互补变量设置为true,并且类似地