0

私は、mvc サイトを介してシリアル化されたいくつかのオブジェクトを取得し、xml、json などを介して物を返すことに取り組んでおり、空の要素を送信しないための最良の方法を探しています。

完璧な世界では、単に EmitDefaultValue:=False を DataContract の DataMembers にアタッチするだけで十分ですが、状況によってはうまくいきません。

String のデフォルトは Nothing ですが、Nothing または String.Empty の場合はシリアル化したくありません。リストとコレクションについても同様です。それらがNothingの場合、またはカウントが0で空の場合、それらをシリアル化したくありません。

あまりきれいではないオプションがいくつかあるようです。

  1. XmlTextWriter自分自身をバッファリングして空の要素をドロップするカスタム
  2. オブジェクトがシリアル化される前に、Empty を Nothing に、Count-0 を Nothing に設定して、prop を循環します。
  3. 空の要素を削除する XSLT
  4. 途中で出力文字列を正規表現する

これらはどれも悪いことのように思えます。そこに他のトリックはありますか?

4

1 に答える 1

0

答えは、データコントラクトシリアライザーは、XMLの形式をそれほど制御できるようにするためのものではないということです。それはそれが何であるかではありません。これだけの制御が必要な場合は、XMLシリアライザーを使用する必要があり、IXmlSerializableを実装する必要がある場合があります。

または、これらの「空の」オブジェクトをシリアル化したくない理由を再検討することもできます。あなたはそれがあなたの時間の価値がないことに気付くかもしれません。

于 2009-09-25T22:47:06.163 に答える