假设我发布了一个类似的对象
{"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,我可以看到发布的子对象,但它不会被取消序列化。有什么想法吗?
好的,这是我的答案,但我很想知道是否有一种方法可以在不添加这行代码的情况下实现这一点。
public Response<MyDto> Post(object input)
{
dynamic myWrapperObj = JsonConvert.DeserializeObject<SomeWrapperForMyDto>
(input.ToString());
...
如果这是必须的,那么公平竞争,但这似乎是一种耻辱。感谢您的任何帖子:)