我有这个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:调用目标抛出了异常。
如何有效地将此字符串转换为对象,因为需要转换多种类型的字符串。
谢谢
答案 0 :(得分:8)
一些小东西,我的代码运行得很好。
第一件事:你得到了一个NullReferenceException。 permissions
类的User
属性从未实例化过。 Json.NET不会为您创建它。我将此默认构造函数添加到User
类:
public User()
{
permissions = new Dictionary<string, bool>();
}
第二件事:它不适用于private
类属性的internal
或User
设置器。一旦我将它们更改为public
,它就可以正常工作。
<强>更新强>
又一次发现。如果您使用User
属性标记了[JsonObject]
类,并且每个属性都标有[JsonProperty]
属性,那么您可以将您的二传手设置为private
或{{1一切都很好。
答案 1 :(得分:2)