将json数组转换为对象列表

时间:2018-09-12 01:53:06

标签: c# asp.net asp.net-mvc json.net

这是我的“ Json对象列表”数组,我对其进行了字符串化处理并将其发送给控制器

"[{\"Id\":\"fieldone\",\"Name\":\"fieldtwo\"}]"

如何在控制器中反序列化它并再次将其转换为对象列表?

目前这是我所拥有的:

var RoleList = JsonConvert.DeserializeObject<SampleViewModel>(Input.RoleList);

这些是我的ViewModels

public class UserAddRoleListViewModel
{
    public String Id { get; set; }
    public String Name { get; set; }
}

public class SampleViewModel
{
    public List<UserAddRoleListViewModel> Test { get; set; }
}

在我运行它的那一刻,我得到了这个错误

Newtonsoft.Json.JsonSerializationException: 'Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'App.Data.ViewModels.SampleViewModel' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.

我应该怎么做才能将其转换为UserAddRoleListViewModels列表?

编辑:添加了控制器和相关的ViewModel

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult VerifyRole(SaveUserNewRoleViewModel Input)
    {
        var RoleList = JsonConvert.DeserializeObject<SampleViewModel>(Input.RoleList);
        return null;
    }

public class SaveUserNewRoleViewModel
{
    [Required]
    public String RoleId { get; set; }
    public String RoleName { get; set; }
    public String RoleList { get; set; }
}

1 个答案:

答案 0 :(得分:0)

要使以下工作正常

var RoleList = JsonConvert.DeserializeObject<SampleViewModel>(Input.RoleList);

您的json应该如下所示

"{ Test:[{\"Id\":\"fieldone\",\"Name\":\"fieldtwo\"}] }"

否则,为了获得正确的结果,您的json

"[{\"Id\":\"fieldone\",\"Name\":\"fieldtwo\"}]"

在下面使用

var RoleList = JsonConvert.DeserializeObject<List<UserAddRoleListViewModel>>(Input.RoleList);