Json.NET DeserializeObject could not find member 'xxx' on object of type 'RuntimeType'
当使用json.net的方法DeserializeObject反序列化一个json格式的字符串生成对应的C#对象时,一定要注意JSON格式的字符串的属性部分一定要区分大小写,如果不区分大小写,就会出现“could not find member 'xxx' on object of type 'RuntimeType'”的错误。
这个是因为低版本的json.net,如1.3,调用DeserializeObject时,如果json格式的字符串属性值和C#对象属性的大小写不匹配时,就会出现“could not find member 'xxx' on object of type 'RuntimeType'”的错误了。升级成高版本的JSON.NET,如4.0,属性部分不区分大小。
但是要注意DeserializeObject/SerializeObject方法从 Newtonsoft.Json.JavaScriptConvert名字空间下面转换到了Newtonsoft.Json.JsonConvert名字空间下面。如果不注意,直接使用,会编译出错,找不到JavaScriptConvert名字空间。
详细示例代码参考下面的文章
JSON.NET使用示例
下面的示例注释的部分是错误的,没有区分大小写,导致编译出错
原创文章,转载请注明出处:Json.NET DeserializeObject could not find member 'xxx' on object of type 'RuntimeType'
这个是因为低版本的json.net,如1.3,调用DeserializeObject时,如果json格式的字符串属性值和C#对象属性的大小写不匹配时,就会出现“could not find member 'xxx' on object of type 'RuntimeType'”的错误了。升级成高版本的JSON.NET,如4.0,属性部分不区分大小。
但是要注意DeserializeObject/SerializeObject方法从 Newtonsoft.Json.JavaScriptConvert名字空间下面转换到了Newtonsoft.Json.JsonConvert名字空间下面。如果不注意,直接使用,会编译出错,找不到JavaScriptConvert名字空间。
详细示例代码参考下面的文章
JSON.NET使用示例
下面的示例注释的部分是错误的,没有区分大小写,导致编译出错
+展开
-C#
//使用1.3版本的json.net,属性一定要注意大小写,要不会出现Could not find member 'firstName' on object of type 'RuntimeType'错误
/*
string strJson = "{\"firstName\":\"John\",\"lastName\":\"Doe\"}";//注意一定要区分属性部分的大小写
employee em = (employee)Newtonsoft.Json.JavaScriptConvert.DeserializeObject(strJson, typeof(employee));
context.Response.Write("JSON格式的字符串生成对应的类实体:" + em.FirstName + "---" + em.LastName);
context.Response.Write("br/br/类实体序列化成JSON格式的字符串:" + Newtonsoft.Json.JavaScriptConvert.SerializeObject(em));*/
string strJson = "{\"firstName\":\"John\",\"lastName\":\"Doe\"}";
//使用新版本的json.net,如果4.0,json格式的字符串属性部分可以不区分大小写,不会出现Could not find member 'firstName' on object of type 'RuntimeType'错误
employee em = (employee)Newtonsoft.Json.JsonConvert.DeserializeObject(strJson, typeof(employee));
context.Response.Write("JSON格式的字符串生成对应的类实体:" + em.FirstName + "---" + em.LastName);
//序列化时,会自动转换成对应的C#对象的属性,区分大小写
context.Response.Write("<br/><br/>类实体序列化成JSON格式的字符串:" + Newtonsoft.Json.JsonConvert.SerializeObject(em));
/*
string strJson = "{\"firstName\":\"John\",\"lastName\":\"Doe\"}";//注意一定要区分属性部分的大小写
employee em = (employee)Newtonsoft.Json.JavaScriptConvert.DeserializeObject(strJson, typeof(employee));
context.Response.Write("JSON格式的字符串生成对应的类实体:" + em.FirstName + "---" + em.LastName);
context.Response.Write("br/br/类实体序列化成JSON格式的字符串:" + Newtonsoft.Json.JavaScriptConvert.SerializeObject(em));*/
string strJson = "{\"firstName\":\"John\",\"lastName\":\"Doe\"}";
//使用新版本的json.net,如果4.0,json格式的字符串属性部分可以不区分大小写,不会出现Could not find member 'firstName' on object of type 'RuntimeType'错误
employee em = (employee)Newtonsoft.Json.JsonConvert.DeserializeObject(strJson, typeof(employee));
context.Response.Write("JSON格式的字符串生成对应的类实体:" + em.FirstName + "---" + em.LastName);
//序列化时,会自动转换成对应的C#对象的属性,区分大小写
context.Response.Write("<br/><br/>类实体序列化成JSON格式的字符串:" + Newtonsoft.Json.JsonConvert.SerializeObject(em));
加支付宝好友偷能量挖...
原创文章,转载请注明出处:Json.NET DeserializeObject could not find member 'xxx' on object of type 'RuntimeType'