入站复杂DTO具有空子对象

时间:2012-07-31 19:38:09

标签: servicestack

奇怪的问题 - 我有一个带有几个子对象的复杂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方法的原因?

感谢

1 个答案:

答案 0 :(得分:2)

您能告诉我们您要发送的json数据吗?还有什么是发送PUT和POST的代码。

您是否尝试过使用Fiddler并查看数据? http://www.fiddler2.com/fiddler2/

要查看代码中的原始数据,您需要拦截输入流并防止发生反序列化。修复后,您将要撤消此操作。

首先用IRequiresRequestStream装饰您的DTO类,如

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

其次,在OnBeforeExecute(T请求)方法中,您可以通过使用断点记录或检查来在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