将JSON字符串转换为"复杂"类?

Vim*_*987 3 .net c# json

我有这个JSON字符串:

 {
"success":true,"user_id":"309","id":"309","sessId":false,"email":null,"name":"Mai Van Quan","username":"quanmv","role":"Reseller Admin","messages":"","org_name":null,"microPayNumber":"4949","microPayWord":"neocam","mobile":null,"permissions":{"ADD_CAMERA":true,
    "REMOVE_CAMERA":true,
    "EDIT_CAM_GENERAL":true,
    "ACCESS_CAM_TECHNICAL":true,
    "EDIT_CAM_PKG":true,
    "PREVIEW_CAM":true
    },"type":"sp","time":1279702793,"reseller":1,"status":"ok"}
Run Code Online (Sandbox Code Playgroud)

我想使用JSON.NET将其转换为C#对象.JSON.NET可以将其转换为"泛型"对象,但我想将其转换为更具体的对象.我创建了这个类:

internal class User
    {

        public User(User u)
        {
            status = u.status;
            id = u.id;
            sessId = u.sessId;
            email = u.email;
            username = u.username;
            role = u.role;
            messages = u.messages;
            org_name = u.org_name;
            microPayNumber = u.microPayNumber;
            microPayWorld = u.microPayWorld;
            mobile = u.mobile;
            permissions = u.permissions;
            type = u.type;
            time = u.time;
            reseller = u.reseller;
            status = u.status;
        }

        public bool successs { private set; get; }


        public string user_id { private set; get; }
        public string id { private set; get; }



        public string name { private set; get; }
        public bool sessId { private set; get; }
        public string email { private set; get; }

        public string username { private set; get; }

        public string role { private set; get; }
        public string messages { private set; get; }
        public string org_name{ private set; get; }
        public string microPayNumber { private set; get; }
        public string microPayWorld { private set; get; }
        public string mobile { private set; get; }
        public Dictionary<string,bool> permissions { private set; get; }
        public string type { private set; get; }

        public int time { private set; get; }

        public int reseller { private set; get; }
        public string status { private set; get; }

}
Run Code Online (Sandbox Code Playgroud)

但是JSON.NET似乎无法将给定的字符串转换为User对象.我尝试了一些方法,但都失败了.

编辑:例如:

var ob = JsonConvert.DeserializeObject<User>(str);
Run Code Online (Sandbox Code Playgroud)

exception:调用目标抛出了异常.

如何有效地将此字符串转换为对象,因为需要转换多种类型的字符串.

谢谢

Sam*_*ham 8

几件小事,我的代码运行得很好.

第一件事:你得到一个NullReferenceException.permissions您的User类的属性从未实例化.Json.NET不会为您创建它.我在你的User类中添加了这个默认构造函数:

public User()
{
    permissions = new Dictionary<string, bool>();
}
Run Code Online (Sandbox Code Playgroud)

第二件事:它不适用于类privateinternal属性的setter User.一旦我改成它public,它工作得很好.

UPDATE

还有一个发现.如果您User使用[JsonObject]属性标记您的类,并使用属性标记每个[JsonProperty]属性,那么您可以将您的setter保留为private或者internal,并且一切都很好.