DataMember发出默认值

Red*_*gle 4 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 = ""
}
Run Code Online (Sandbox Code Playgroud)

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

两种选择之一

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

  2. 在课堂上有一些条件

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

谢谢

Ste*_*rex 6

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

[DataContract]
public class MyClass
{
    [DataMember (EmitDefaultValue=false)]
    [DefaultValue("")]
    public string myValue = ""
}
Run Code Online (Sandbox Code Playgroud)


kri*_*SFT 0

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

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

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