【发布时间】:2010-07-21 09:25:26
【问题描述】:
我有这个 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 似乎无法将给定的字符串转换为用户对象。我尝试了一些方法,但都失败了。
编辑:例如:
var ob = JsonConvert.DeserializeObject<User>(str);
异常:调用的目标已抛出异常。
如何有效地将这个字符串转换为对象,因为需要转换的字符串类型不止一种。
谢谢
【问题讨论】:
-
您是否收到任何错误消息?
-
“他们都失败了”不是很具有描述性。解释你尝试了什么,发生了什么。如果由于私有属性设置器而失败,我不会完全感到惊讶。
-
@jon: +1 用于查看私人集... :)
-
@Jon Skeet:我将所有访问修饰符切换为“public”,异常仍然存在 :)