2016-05-25 8 views
1

私はServiceStack DTOを持っている:ServiceStack.ToJsonを*時々*プロパティを無視するにはどうしますか?

[Route("/images", "POST")] 
public class PostImageCommand 
{ 
    public string Notes { get; set; } 
    public byte[] Image { get; set; } 
    //other properties removed for brevity 
} 

私もlog4netのを使用してメッセージをログに記録し、私のコード内の一部を持っています。私はコマンドをシリアル化することでこれを行います。例えば、私はこれを行う:

var command = new PostImageCommand(){ 
    //set properties 
}; 

var commandJson = command.ToJson(); 
MyLogClass.Log(commandJson); 

問題を:イメージバイト配列はかなり大きくなる可能性があります。ロギング時にこのプロパティをシリアル化したくない場合は、ログに大量のイメージデータが格納されます。

DTOのImage byte []に​​[IgnoreDataMember]属性を入れてみました。しかし、その理由はVisual Studioに理由がないとビルドに失敗するためです。私は、Imageプロパティに属性を置くことができますが、私が構築しようとしたとき、私は、これは以下を参照してください。

enter image description here

ビルドが失敗しない理由、ちょうどこれらのメッセージを。 「出力」タブには「操作がキャンセルされました」と表示されます。

私の質問:自分の状況でDTOプロパティがシリアル化されるのを無視する最も簡単な方法は何ですか?

答えて

3

この前の回答は、different ways to ignore properties in ServiceStack.Textです。しかし、実際にログに記録されているプロパティを無視するだけの場合は、nullにプロパティを設定して復元し、built-in AutoMapping toolsを使用してシリアル化するタイプの別のモデルにマップします。ToObjectDictionary()拡張メソッドを使用してモデルをシリアル化します辞書に入れて、ログに記録したくないアイテムを削除します。

[IgnoreDataMember]属性の問題は、System.Runtime.Serialization .NET Frameworkアセンブリを参照していないためです。

+0

本人からの答えは、ありがとう!これは私を助けた。 – ohyeah

+0

@ohyeah np :)うれしかったよ! – mythz

関連する問題