WebApi动作从发布的json丢失子集合

时间:2013-02-15 10:59:55

标签: asp.net-web-api json.net

假设我发布了一个像这样的对象

{"Dto" : {
            "DtoId" : 1, 
            "DtoThing" : "Some value", 
            "DtoChildStuff" : [{"CsId" : 1, "ChildProperty" : "SomeThing"}]
           }}

这样的WebApi动作

[HttpPost]
public Response<MyDto> Post(DtoWrapper<MyDto> input)...

其中参数只是某个对象,其属性MyDto属于MyDto类型,而MyDto就是这样的

[DataContract]
public class MyDto
{
    [DataMember]
    public int DtoId {get;set;}
    [DataMember]
    public string DtoThing {get;set;}
    [DataMember]
    public List<ChildStuffDto> DtoChildStuff {get;set;}
}

[DataContract]
public class ChildStuffDto
{   
    [DataMember]
    public int CsId {get;set;}
    [DataMember]
    public string ChildProperty {get;set;}
}

和(顺便说一句)DtoWrapper只是

public class DtoWrapper<T>
{
   public T Dto {get;set;}
   // So that I can add some other info that I need //
}

为什么动作不能看到任何子对象。如果我将参数的类型更改为object,我可以看到子对象被发布,但它没有被反序列化。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好的,这是我的回答,但是我很想知道是否有办法让我可以在不添加这行代码的情况下实现这一点。

    public Response<MyDto> Post(object input)
    {

        dynamic myWrapperObj = JsonConvert.DeserializeObject<SomeWrapperForMyDto>
                             (input.ToString());
        ...

如果这就是公平竞争的方式,但这似乎是一种耻辱。感谢任何帖子:)