Cor*_*aan 3 c# json asp.net-mvc-4 asp.net-web-api
以下一直让我有点疯狂.我发现了几个类似的问题,但他们没有提供解决方案.我试图发布一个包含一些数据项的json对象.其中一个是对象本身的列表.这里是:
{
"ClaimType":"Trade",
"ClaimedProductId":"4",
"ClaimingUserId":"2",
"Message":"test",
"TradeOffers":[
{
"OfferedProductId":"7",
"OfferedQuantity":"5"
},
{
"OfferedProductId":"12",
"OfferedQuantity":"2"
}
]
}
Run Code Online (Sandbox Code Playgroud)
这个json验证了.
我的控制器看起来像这样:
public class ProductController : ApiController
{
[HttpPost]
public void Claim(ClaimViewModel claimViewModel)
{
//do some amazing stuff with the data from the viewmodel.
//sorry guys. This stuff is just tooo cool to be posted here for all to see
//NOT ;-)
}
}
Run Code Online (Sandbox Code Playgroud)
我发布的ClaimViewModel看起来像这样:
public class ClaimViewModel
{
public Claim.ClaimRequestTypes ClaimType { get; set; }
public int ClaimedProductId { get; set; }
public int ClaimingUserId { get; set; }
public string Message { get; set; }
public List<TradeOffer> TradeOffers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
为了完整起见,这里是TradeOffer类:
public class TradeOffer
{
int OfferedProductId { get; set; }
int OfferedQuantity { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我开始从Javascript发布帖子之前,我喜欢使用Chrome RestConsole来测试这个坏男孩,所以我可以在引擎盖下看起来更好一些.我使用以下设置发出请求:
接下来会发生什么:我的所有属性ClaimViewModel反序列化都很简单.但是,TradeOffers属性得到实例化,当调试显示一个计数为2的列表(到目前为止一直很好),但此列表中的对象的值(属性OfferedProductId和OfferedQuantity)总是0 /零(不为空!)
TradeOffer类中的属性是私有的(C#中的默认访问修饰符),这使得无法从外部设置它们.尝试制作它们public:
public class TradeOffer
{
public int OfferedProductId { get; set; }
public int OfferedQuantity { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2547 次 |
| 最近记录: |