1

假设我发布这样的对象

{"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 //
}

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

4

1 回答 1

0

好的,这是我的答案,但我很想知道是否有一种方法可以在不将这行代码添加到我的操作中的情况下实现它。

    public Response<MyDto> Post(object input)
    {

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

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

于 2013-02-15T11:31:41.577 回答