我有一個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看到我的編輯。 –