5

1 つの文字列を受け入れることができる .Net Web サービス関数があります。

その関数はその文字列を JSON にシリアル化しますが、値が "" でない場合にのみシリアル化したいのです。

私はこれらの指示を見つけました:

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

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

残念ながら、"" は文字列の .Net デフォルト値ではないため、シリアライゼーションから myValue を非表示にすることはできません (なんてバカなの!)

2 つのオプションのうちの 1 つが発生しました

  1. Web サービスには、「」を null に設定するある種の属性があります。

  2. クラスに何らかの条件がある

コードがきれいになるので、私は1番目を好みますが、意見は素晴らしいでしょう。

ありがとう

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 に答える