反序列化返回对象,并将所有值设置为null

时间:2017-06-12 08:49:08

标签: c# json json.net

String str ="{\"_id\":\"eta_emp_1\",\"_rev\":\"446-195e9341df50aeed33d2cb833420b100\",";
str+="\"channels\":[\"ch_pri-eta_org\"],\"doc_type\":\"emp\",\"downloaded\":true,";
str+="\"eta_code\":\"abhi\",\"f_name\":\"Abhilash\",\"isactive\":true,";
str+="\"isadmin\":true,\"l_name\":\"Dhondalkar\",";
str+="\"lat\":17.69967582522918,\"lon\":75.89857880026102,";
str+="\"m_name\":\"Dheeraj\",\"mod_at\":1494693566503,\"mod_by\":\"eta_emp_1\",";
str+="\"org_id\":\"eta_org\",\"pwd\":\"abcde\",";
str+="\"reported_by\":[\"e27f41e7-5b84-4c86-838e-97598b4d20a0\",\"8daa0901-f6e8-4fdd-b41c-658aa901899d\",";
str+="\"9bf72297-481c-4d59-a0f4-d5549cb60e27\",\"2e5ce994-2cfb-4e62-88f8-ff1d3a069ca0\"]}";

UserDetails userDetails = JsonConvert.DeserializeObject<UserDetails>(str);



 public class UserDetails
    {

    String _id{get;set;}
    String _rev { get; set; }
    String[] channels{get;set;} 
    String doc_type{get;set;} 
    bool downloaded{get;set;} 
    String eta_code{get;set;} 
    String f_name{get;set;}
    bool isactive { get; set; }
    bool isadmin { get; set; } 
    long l_name{get;set;}
    long lat{get;set;}
    String lon{get;set;}
    String m_name{get;set;}
    long mod_at{get;set;} 
    String mod_by{get;set;}
    String org_id{get;set;}
    String pwd{get;set;} 
    String[] reported_by{get;set;}
    }

所有值都设置为null。 无法弄清楚问题。 Pl帮助

3 个答案:

答案 0 :(得分:1)

这个课应该有效:

public class UserDetails
{
        public string _id { get; set; }
        public string _rev { get; set; }
        public List<string> channels { get; set; }
        public string doc_type { get; set; }
        public bool downloaded { get; set; }
        public string eta_code { get; set; }
        public string f_name { get; set; }
        public bool isactive { get; set; }
        public bool isadmin { get; set; }
        public string l_name { get; set; }
        public double lat { get; set; }
        public double lon { get; set; }
        public string m_name { get; set; }
        public long mod_at { get; set; }
        public string mod_by { get; set; }
        public string org_id { get; set; }
        public string pwd { get; set; }
        public List<string> reported_by { get; set; }
}

更多帮助:

http://json2csharp.com

根据我之前使用JSON.NET的经验,从JSON到正确的类的转换可能有点棘手。上面的网站一直为我提供合适的课程。唯一的例外是维基百科API,因为它是一个动态API,你需要做一个小技巧。

另外,请记住所有属性必须是公开的,因为如果某些内容是私有的(例如在您的问题中),则转换器或其他任何内容都无法访问它。我希望它有用。

答案 1 :(得分:1)

将类中的所有属性标记为public,或者明确地将JsonProperty属性添加到每个属性,如下所示:

public class UserDetails
    {
        [JsonProperty("_id")]
        String _id { get; set; }

        ...
    }

答案 2 :(得分:0)

使用Json Validator时,我得到“根JSON数据必须代表一个对象或一个数组”,因此表明你的JSON最不正确。 这就是为什么无法将string序列化到您的类,而保留属性null。 您应该向我们展示您的序列化过程,以了解错误的位置。