我有一个JSON阵列,它看起来像这样:反序列化JSON字符串到C#
{[
{
"personnelId": 201,
"occupationIds": [
4,
5
]
},
{
"personnelId": 202,
"occupationIds": [
5
]
}
]}
我通过我的ASP.NET Web API控制器JObject
收到此字符串:
var jPersonnelAndOccupationIds = json["personnelAndOccupationIds"];
我已经成功通过JObject
去各种各样的数据结构,但这一直给出RuntimeBinderException
,什么数据结构将最适合那个JSON字符串,我已经尝试了很多东西,这个IMO是最合适的List<PersonnelOccupationsVm>
其中PersonnelOccupationsVm
看起来是这样的:
public class PersonnelOccupationsVm
{
public long personnelId { get; set; }
public List<long> occupationIds { get; set; }
}
我desrialize这样的:
var personnelIdsAndOccupationsKvp = jPersonnelAndOccupationIds.ToObject(new List<PersonnelOccupationsVm>());
,我已经试过
System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<List<PersonnelOccupationsVm>>(jPersonnelAndOccupationIds);
既不作品。有任何想法吗?
编辑
正如意见中的要求,我正在做我的电话是这样的(角度):
$http({
method: 'POST',
url: '/api/EnterprisePersonnelApi/SubmitOcupationalPersonnel/',
data: JSON.stringify({ enterpriseId: enterpriseId, positionId: positionId,personnelAndOccupationIds: personnelAndOccupationIds }),
}).success(function (data, status, headers, config) {
deferred.resolve(data);
}).error(function (data, status, headers, config) {
deferred.reject(status);
});
和我的Web API操作:
[System.Web.Http.HttpPost]
public CrudOperationResults SubmitOcupationalPersonnel(JObject jsonData){
dynamic json = jsonData;
var jPersonnelAndOccupationIds = json["personnelAndOccupationIds"];
var personnelIdsAndOccupations = jPersonnelAndOccupationIds.ToObject(new List<PersonnelOccupationsVm>());
.....
}
这给定一个RunTimeBinderexception
,但是当我从JObject
实例中调用.ToString()
时:
var jPersonnelAndOccupationIds = json["personnelAndOccupationIds"].ToString();
和(每shunty的建议)
var jPersonnelAndOccupationIds = Newtonsoft.Json.JsonConvert.DeserializeObject<List<PersonnelOccupationsVm>>(jPersonnelAndOccupationIds);
这工作得很好,而来自JObject retieving我的参数值添加的开头和结尾的大括号,呼吁.ToString()
每上述反序列化它的伎俩。
你显示的是无效的JSON。 JSON数组应该以'['开始并以']结尾。在你的例子中,似乎有一些包裹'{'和'}'。另外你在这里使用的'json'变量是什么:'json [“personnelAndOccupationIds”]'?它从何而来?它看起来像你试图反序列化JSON字符串两次。 –
同意JSON无效。尝试http://jsonlint.com/。 – tia
@DarinDimitrov看到我的编辑。 –