【问题标题】:DataMember Emit Default ValueDataMember 发射默认值
【发布时间】:2011-08-18 11:15:22
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: asp.net json datamember


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-01-23
        • 1970-01-01
        • 2018-06-03
        • 2018-12-21
        • 1970-01-01
        • 2020-09-05
        • 2011-09-09
        • 2012-11-28
        相关资源
        最近更新 更多