2011-05-04 49 views
4

我有一个.Net Web服务函数可以接受一个字符串。DataMember发送默认值

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

我发现这些指令:

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

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

可惜的是我不能隐藏从序列的myvalue的,因为“”是不是一个字符串的.Net默认值(是多么愚蠢! )

一两个选项内容时发生

  1. Web服务上具有某种属性的那台“”为空

  2. 对类的一些条件

我宁愿第一,因为它使代码更清洁,但意见会很棒。

感谢

回答

0

我想你至少有一对夫妇选择这里。这是额外的工作,但值得。

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

  • 最后一个选项是添加一个额外的互补变量(可能是一个布尔值),该变量在OnDeserializing/OnDeserialized/OnSerializing/OnSerialized上设置,并使用它来跟踪线路上是否实际存在某些东西。您可能,例如,这种互补变量设置为true,只有当你真正序列化出一个非空字符串,同样

5

您可以明确设置的默认值是什么(串行化的目的)使用DefaultValueAttribute等级:

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