【问题标题】:Convert JSON string into "complicated" class?将 JSON 字符串转换为“复杂”类?
【发布时间】: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”,异常仍然存在 :)

标签: c# .net json


【解决方案1】:

几件小事,我的代码运行良好。

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

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

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

更新

另一个发现。如果您使用[JsonObject] 属性标记您的User 类,并且使用[JsonProperty] 属性标记您的每个属性,那么您可以将您的设置器保留为privateinternal,一切都很好。

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 2020-11-25
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多