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

时间:2010-07-21 09:25:27

标签: c# .net 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"}

我想使用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; }

}

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

编辑:例如:

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

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

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

谢谢

2 个答案:

答案 0 :(得分:8)

一些小东西,我的代码运行得很好。

第一件事:你得到了一个N​​ullReferenceException。 permissions类的User属性从未实例化过。 Json.NET不会为您创建它。我将此默认构造函数添加到User类:

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

第二件事:它不适用于private类属性的internalUser设置器。一旦我将它们更改为public,它就可以正常工作。

<强>更新

又一次发现。如果您使用User属性标记了[JsonObject]类,并且每个属性都标有[JsonProperty]属性,那么您可以将您的二传手设置为private或{{1一切都很好。

答案 1 :(得分:2)