0

奇妙な問題 - 次のように宣言された、いくつかの子オブジェクトを持つ複雑な DTO があります。

[コード]

public class ScoutingReportProPitcher
{
    [DataMember]
    public Guid ReportID { get; set; }

    [DataMember]
    public ScoutingReport Report { get; set; }
    [DataMember]
    public ScoutingReportPro Pro { get; set; }
    [DataMember]
    public ScoutingReportPitcher Pitcher { get; set; }
}

[/コード]

すべてが正しくクライアントに送信されています。彼が PUT または POST でデータを送り返そうとすると、子オブジェクトが入力されません。おそらく、DTO コンストラクターで子オブジェクトを初期化する必要があると思いましたが、これにより、インバウンド オブジェクトが子オブジェクトを持つようになりました。すべての空のプロパティ。

UI 開発者に、彼が POST している JSON オブジェクトを送ってもらいました。JsonSerializer.DeserializeFromString を実行すると、オブジェクトが正しく入力されたようです。

オブジェクトが外部から POST メソッドに正しく渡されない理由を判断するために、他に何を調べることができますか?

ありがとう

4

1 に答える 1

2

送信しようとしているjsonデータを見せてもらえますか? また、PUT と POST を送信するコードはどのようなものですか。

Fiddler を使ってデータを見てみましたか? http://www.fiddler2.com/fiddler2/

コード内の生データを表示するには、入力ストリームをインターセプトして、逆シリアル化が発生しないようにする必要があります。修正したら、これを元に戻したいと思うでしょう。

最初に IRequiresRequestStream のように DTO クラスを装飾します

public class ScoutingReportProPitcher : IRequiresRequestStream  
{
    public System.IO.Stream RequestStream { get; set; }
    ....
 }

第 2 に、OnBeforeExecute(T request) メソッドでは、ログを記録するか、ブレークポイントを使用して検査することで、json データをピークにできます。

protected override void OnBeforeExecute(T request)
{
    var rawData = base.RequestContext.Get<IHttpRequest>().GetRawBody();
    base.OnBeforeExecute(request);
}

詳細な説明については、https: //groups.google.com/d/topic/servicestack/l9qFvZNbuT0/discussionを参照してください。

于 2012-07-31T21:05:30.563 に答える