views:

77

answers:

2

I have this JSON string:

 {
"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"}

I want to convert it to a C# object, using JSON.NET. JSON.NET can convert it to a "generics" object, but I want to convert it to a more specific object. I created this class:

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; }

}

but JSON.NET seems to be failed to convert the given string to an User object. I tried some methods, but they failed all.

EDIT: for example:

var ob = JsonConvert.DeserializeObject<User>(str);

exception: Exception has been thrown by the target of an invocation.

How can I convert this string to an object, effectively, because there is more than one type of string need to be converted.

Thank you

+4  A: 

Couple of small things, and I have your code running great.

First thing: You were getting a NullReferenceException. The permissions property of your User class was never instantiated. Json.NET does not create it for you. I added this default constructor to your User class:

public User()
{
    permissions = new Dictionary<string, bool>();
}

Second thing: It doesn't work with private or internal setters on the properties of the User class. Once I changed them to public, it worked fine.

UPDATE

One more discovery. If you tag your User class with a [JsonObject] attribute, and each of your properties with a [JsonProperty] attribute, then you can leave your setters as either private or internal, and everything works great.

Samuel Meacham
+1 for [JsonProperty]!!
David Robbins
How can I thank you? It works perfectly :D
Vimvq1987