3

JSONシリアル化からアイテムを条件付きで除外する方法はありますか?WebAPIを使用する.NET4アプリケーションでC#を使用しています。私はすでにクラスに参加していて、すべてが正常に機能しています[DataMember][ScriptIgnore]私がやりたいのは、プロパティの値に基づいて実行時に特定のプロパティを含めないことです

たとえば、シリアル化したいのは次の場合のみですList<Foo> myFoo

myFoo != null && myFoo.Count > 0

JSONは、クライアント上の自分のJSオブジェクトに変換され、すべてのプロパティがのようにインスタンス化されますmyFoo: []。これらをJSONでクライアントに送信する必要はありません。これは、基本的にオブジェクトに影響を与えず、より多くのデータを送信し、クライアントでより多くの処理を使用するだけだからです。これは非常にJSの重いHTML5モバイルサイトであり、できるだけ多くのデータと処理を削減しようとしています。

4

3 に答える 3

7

あなたの質問に答えてくれたOPに感謝しますが、私が同じ状況に遭遇したので、もう少し情報があれば良かったでしょう。大変でしたが、ようやくその方法を見つけました。それについてはそれほど多くはありませんが、Json.netのアーカイブの低いページによると、それがどのように機能するかは次のとおりです。

public class Tricorn
{
   public string RocketFuel { get; set; }

   public bool ShouldSerializeRocketFuel()
   {
      return !string.IsNullOrEmpty(this.RocketFuel.Length);
   }
}

重要なのは、プロパティ名に「ShouldSerialze」という述語を使用してメソッドを作成することです。戻り値は、シリアル化する必要があるかどうかを示し、残りはJson.netが処理します。これが誰かに役立つことを願っています!

于 2012-10-18T16:32:36.390 に答える
0

ここでは、ゲッターを使用するのが最善の策かもしれません。

[ScriptIgnore]
private List<Foo> myFoo;

public List<Foo> MyFoo
{
   get
   {
      if (this.myFoo != null && this.myFoo.Count > 0)
      {
         return this.myFoo;
      }
      else
      {
         return null;
      }
   }
}
于 2012-04-20T14:06:57.497 に答える
0

実行時に条件付きシリアル化を実行できるJson.netを見つけました。

于 2012-04-24T15:45:34.037 に答える