2010-07-21 53 views
3

我有这样的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"} 

我想将其转换为C#对象,使用JSON.NET。 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); 

例外:异常已被调用的目标抛出。

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

谢谢

+0

你是否收到任何错误信息? – 2010-07-21 09:28:22

+3

“他们全部失败”并不是非常具有描述性。解释你的尝试,以及发生了什么。如果由于私人财产制定者的失败,我不会“惊讶”。 – 2010-07-21 09:28:37

+0

@jon:+1看到私人设置... :) – 2010-07-21 09:29:30

回答

8

夫妇的小东西,我有你的代码运行大。

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

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

第二件事:它不会对User类的属性privateinternal制定者的工作。一旦我将它们更改为public,它工作正常。

UPDATE

还有一个发现。如果您将User类标记为[JsonObject]属性,并且您的每个属性都具有[JsonProperty]属性,那么您可以将其设置为privateinternal,并且一切都很好。

+0

+1 [JsonProperty]! – 2010-07-21 10:20:59

+0

我怎样才能谢谢你?它完美的作品:D – Vimvq1987 2010-07-21 10:51:36