5

我有一个可以接受一个字符串的 .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. 对班级有一些条件

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

谢谢

4

2 回答 2

7

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

[DataContract]
public class MyClass
{
    [DataMember (EmitDefaultValue=false)]
    [DefaultValue("")]
    public string myValue = ""
}
于 2013-07-02T18:15:05.807 回答
0

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

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

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

于 2012-04-26T17:37:25.383 回答