我正在尝试解决一个调用c# webApi2项目的角控制器的问题。
我不认为我完全理解c#是如何将JSON转换为类型的。
我经常在webform_变量 中得到null[System.Web.Http.HttpPatch]
[Route("{itemId_}")]
public IHttpActionResult PatchItemById([FromUri] int itemId_, [FromBody] parent webForm_)
如果我传入格式错误的JSON,我当然可以使值为NULL。有道理。
似乎c#在"使json适合预期的类"方面做得很好取这个JSON
{ "name":"test",
"children": [{
"nm": "child1",
"v1": "NM",
"v2": "12000000",
"v3": 546
}]
}
这些类
public class parent {
public string name;
public sillyObject[] children;
}
public class mSillyObject
{
public string nm;
public string v1;
public string v2;
public string r;
public string a;
}
这似乎工作,即使JSON有元素不在类中,反之亦然。生成的对象将尽可能地填充所有字段
然而,在其他时候,我得到webform = null_即使JSONLint告诉我我在发送有效的JSON。
我用谷歌搜索了我能想到的所有方法。
一定有什么文档解释了这个?谁能提供一些文档链接,或者提供一些关于故障排除和常见错误的想法?
tyia格雷格
你可以在你的json中尝试这样做,用父类替换mproject,使itemId_可选并删除HttpPath
[Route("{itemId_?}")]
public IHttpActionResult PatchItemById([FromUri] int itemId_, [FromBody] parent webForm_)
还是很有兴趣了解一下这是如何工作的。
我已经能够确定这些规则
- json可以有模型没有的属性
- 模型可以有json 中没有的属性。
如果模型具有public string property1
而json具有"property1" : []
,则强制转换将失败。数组是否有内容似乎并不重要。c#正在查找单个项,而不是数组。
如果模型有public sillyObject silly;
- 拥有JSON中缺少的属性
- 有
"silly" : null
工作 - 设置
"silly" : {}
会导致强制转换失败
如果我遇到任何问题,我会在这里发布更多的问题。或者如果我找到一篇描述这个的文章