将字符串转换为json C#

将字符串转换为json C#,c#,json,C#,Json,我有我正在使用的示例代码。json是http post的结果 var json = @"{'user': { 'country':'US', 'email':'testapi@example.com', 'first_name':'Test', 'last_name':'API',

我有我正在使用的示例代码。json是http post的结果

var json = @"{'user': {
                        'country':'US',
                        'email':'testapi@example.com',
                        'first_name':'Test',
                        'last_name':'API',
                        'phone':null,
                        'zip':null,
                        'login_url':'https://new.site.com/xlogin/12325/abd9832cd92'
                        }
                    }";
        var jsonSerializer = new JavaScriptSerializer();
        var itemsList = (IDictionary<string, object>)jsonSerializer.DeserializeObject(json);
        var url = itemsList["user.login_url"];
我做错什么了吗?我应该如何从该对象访问名字、姓氏和url等?

或者,如何将此结果绑定到具有以下属性的类?我只需要一个指向好资源的指针

public class User
{
    public string Country { get; set; }
    public string Email { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Phone { get; set; }
    public string Zip { get; set; }
    public string LoginUrl { get; set; }
}
谢谢

“user.login\u url”是您希望在JavaScript中使用的属性路径。。。请尝试访问字典键

var user = itemsList["user"] as IDictionary<string,object>;
var url = user["login_url"] as string;
var user=itemsList[“user”]作为IDictionary;
var url=user[“login\u url”]作为字符串;
“user.login\u url”是您希望在JavaScript中使用的属性路径。。。请尝试访问字典键

var user = itemsList["user"] as IDictionary<string,object>;
var url = user["login_url"] as string;
var user=itemsList[“user”]作为IDictionary;
var url=user[“login\u url”]作为字符串;
尝试使用它将为您提供一个包含所需类型的词典。

尝试使用它将为您提供一个包含所需类型的词典。

项目列表[“用户”]包含第二个词典。因此,您可以使用

var user = (IDictionary<string, object>)itemsList["user"];
var login_url = user["login_url"];
var user=(IDictionary)itemsList[“user”];
var login_url=user[“login_url”];
itemsList[“用户”]包含第二个字典。因此,您可以使用

var user = (IDictionary<string, object>)itemsList["user"];
var login_url = user["login_url"];
var user=(IDictionary)itemsList[“user”];
var login_url=user[“login_url”];

我真的不明白为什么要用IDictionary解析json对象

  • 使用Newtonsoft.Json而不是jsonSerializer要使用更多的文章
  • 继续生成类来定义json(复制json,结果是C#class)
  • 现在将您的json绑定到新的RootObject,而不是用户:

    using System;
    using Newtonsoft.Json;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                var json = @"{'user': {
                            'country':'US',
                            'email':'testapi@example.com',
                            'first_name':'Test',
                            'last_name':'API',
                            'phone':null,
                            'zip':null,
                            'login_url':'https://new.site.com/xlogin/12325/abd9832cd92'
                            }
                        }";
    
                RootObject userObj = JsonConvert.DeserializeObject<RootObject>(json.ToString());
    
            }
        }
    
    
        //generated with http://json2csharp.com/
        public class User
        {
            public string country { get; set; }
            public string email { get; set; }
            public string first_name { get; set; }
            public string last_name { get; set; }
            public object phone { get; set; }
            public object zip { get; set; }
            public string login_url { get; set; }
        }
    
        public class RootObject
        {
            public User user { get; set; }
        }
    }
    
    使用系统;
    使用Newtonsoft.Json;
    命名空间控制台应用程序1
    {
    班级计划
    {
    静态void Main(字符串[]参数)
    {
    var json=@“{'user':{
    ‘国家’:‘美国’,
    “电子邮件”:testapi@example.com',
    “名字”:“测试”,
    “姓氏”:“API”,
    “电话”:空,
    “zip”:null,
    '登录url':'https://new.site.com/xlogin/12325/abd9832cd92'
    }
    }";
    RootObject userObj=JsonConvert.DeserializeObject(json.ToString());
    }
    }
    //产生于http://json2csharp.com/
    公共类用户
    {
    公共字符串国家{get;set;}
    公共字符串电子邮件{get;set;}
    公共字符串first_name{get;set;}
    公共字符串last_name{get;set;}
    公共对象电话{get;set;}
    公共对象zip{get;set;}
    公共字符串登录\u url{get;set;}
    }
    公共类根对象
    {
    公共用户{get;set;}
    }
    }
    
    我真的不明白为什么要用IDictionary解析json对象

  • 使用Newtonsoft.Json而不是jsonSerializer要使用更多的文章
  • 继续生成类来定义json(复制json,结果是C#class)
  • 现在将您的json绑定到新的RootObject,而不是用户:

    using System;
    using Newtonsoft.Json;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                var json = @"{'user': {
                            'country':'US',
                            'email':'testapi@example.com',
                            'first_name':'Test',
                            'last_name':'API',
                            'phone':null,
                            'zip':null,
                            'login_url':'https://new.site.com/xlogin/12325/abd9832cd92'
                            }
                        }";
    
                RootObject userObj = JsonConvert.DeserializeObject<RootObject>(json.ToString());
    
            }
        }
    
    
        //generated with http://json2csharp.com/
        public class User
        {
            public string country { get; set; }
            public string email { get; set; }
            public string first_name { get; set; }
            public string last_name { get; set; }
            public object phone { get; set; }
            public object zip { get; set; }
            public string login_url { get; set; }
        }
    
        public class RootObject
        {
            public User user { get; set; }
        }
    }
    
    使用系统;
    使用Newtonsoft.Json;
    命名空间控制台应用程序1
    {
    班级计划
    {
    静态void Main(字符串[]参数)
    {
    var json=@“{'user':{
    ‘国家’:‘美国’,
    “电子邮件”:testapi@example.com',
    “名字”:“测试”,
    “姓氏”:“API”,
    “电话”:空,
    “zip”:null,
    '登录url':'https://new.site.com/xlogin/12325/abd9832cd92'
    }
    }";
    RootObject userObj=JsonConvert.DeserializeObject(json.ToString());
    }
    }
    //产生于http://json2csharp.com/
    公共类用户
    {
    公共字符串国家{get;set;}
    公共字符串电子邮件{get;set;}
    公共字符串first_name{get;set;}
    公共字符串last_name{get;set;}
    公共对象电话{get;set;}
    公共对象zip{get;set;}
    公共字符串登录\u url{get;set;}
    }
    公共类根对象
    {
    公共用户{get;set;}
    }
    }
    

    您在img中隐藏了您的URL,但将其保留在代码中—“登录URL”:“json中的URL错误,这就是我将其保留在那里的原因。您在img中隐藏了您的URL,但将其保留在代码中—“登录URL”:“json中的URL错误,这就是我将其保留在那里的原因。这导致无法使用[]应用索引对于“object”类型的表达式,修复了代码-我没有从用户键强制转换到IDictionary,这对我有效。由于另一方面的原因,我的最后期限很紧,所以我也会同意这一点,并对其进行投票。我将把这个标记为答案。稍后我将查看json.net并尝试这样做。这导致无法使用[]对“object”类型的表达式应用索引修复了代码-我没有从用户键转换到IDictionary这对我有效。由于另一方面的原因,我的最后期限很紧,所以我也会同意这一点,并对其进行投票。我将把这个标记为答案。稍后我将查看json.net,并尝试这样做。这并不能回答问题。@mason如果使用此库,他将不会面临此问题。库本身将结果放入字典中,他将能够访问字典中的值(这基本上是更好/更快地读取/写入JSON的方法)。我知道什么是JSON.NET,以及它是如何工作的。但是如果有人问你如何建造一座房子,你不会说“这是一把锤子,它可以做你想做的。”仅仅建议使用这个工具是不够的,你需要解释如何使用这个工具。即使他按照你的建议切换到JSON.NET,他也可能会使用不正确的语法
    itemsList[“user.login\u url”]
    ,除非你解释这是不对的。@梅森你可能是对的,但我只是帮他弄到了一个