我有一个可以接受一个字符串的.Net Web服务功能。
然后该函数将该字符串序列化为JSON,但我只想序列化它,如果它的值不是“”。
我找到了这些说明:
http://msdn.microsoft.com/en-us/library/aa347792.aspx
[DataContract]
public class MyClass
{
[DataMember (EmitDefaultValue=false)]
public string myValue = ""
}
不幸的是我无法隐藏序列化中的myValue,因为“”不是字符串的.Net默认值(这是多么愚蠢!)
两个选项之一
在Web服务上有某种属性将“”设置为null
在课堂上有一些条件
我更喜欢第一种,因为它使代码更清晰,但意见会很棒。
由于
答案 0 :(得分:6)
您可以使用DefaultValueAttribute
类显式设置默认值(用于序列化):
[DataContract]
public class MyClass
{
[DataMember (EmitDefaultValue=false)]
[DefaultValue("")]
public string myValue = ""
}
答案 1 :(得分:0)
我认为你至少有几个选择。这是额外的工作,但值得。
您可以将字符串封装在引用类型中。由于引用类型如果不存在则为null,这可以让您立即知道字符串是否存在(因为封装引用类型将为非null或null,如果字符串非空或不存在。)
最后一个选项是添加一个额外的互补变量(可能是一个布尔值),该变量在OnDeserializing / OnDeserialized / OnSerializing / OnSerialized上设置,并用它来跟踪线路上是否存在某些东西。例如,您可能只有在实际序列化非空字符串时才将此互补变量设置为true,并且类似地