json字符串是这样的
{"result":"1","info":"","jj":[],"nomal":[],"jjcount":0,"nomalcount":1}
反序列化的时候就报错了,提示json基元有误;
当json字符串为这样的时候可以反序列化
{"result":"1","info":"","jj":[{"taskno":"117010500037","car_num":"沪NT0898","hktime":"31","jjbj":"0"}],"nomal":[{"taskno":"117010500037","car_num":"沪NT0898","hktime":"31","jjbj":"0"}],"jjcount":0,"nomalcount":1}
反序列化的方法是
public static T Deserialize<T>(string sJson) where T : class { System.Web.Script.Serialization.JavaScriptSerializer script = new System.Web.Script.Serialization.JavaScriptSerializer(); return script.Deserialize<T>(sJson); } CarClass cc = Deserialize<CarClass>(reslut);
报错信息如下:
捕捉到 System.ArgumentException
Message=无效的 JSON 基元: 。
Source=System.Web.Extensions
StackTrace:
在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()
在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)
在 System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)
InnerException:
难度list个数为0的时候就不能被反序列化?求打救!!!
我的类这样写的
public class CarClass { public string result { get; set; } public string info { get; set; } public List<car> jj { get; set; } public List<car> nomal { get; set; } public int jjcount { get; set; } public int nomalcount { get; set; } public CarClass() { } } public class car { public string taskno { get; set; } public string car_num { get; set; } public string hktime { get; set; } public string jjbj { get; set; } public car() { } }
System.Runtime.Serialization.Json.DataContractJsonSerializer json = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(CarClass));
CarClass source = (CarClass)json.ReadObject(new MemoryStream(Encoding.UTF8.GetBytes(result)));
一点压力都没有啊。
谢谢,终于知道原因了,我把项目架构改成framework .NET4.0就可以了,之前的方法也是可行的。是你帮忙找出了原因,所以分给你。
为什么一定要传一个空的数组呢。为空的时候不传不行吗
有两个数组,其中一个为空的时候就序列化不了
@寒子非: 对啊,所以说你加个判断,如果[]是个空数组就不进行序列化。或者数组个数为零的话,就把[]用“” 或者 null 替代.
@唯忆青语: 序列化成json不是我写的,我这边只是负责把json反序列化成对象,他这样的json格式也是没错的
@寒子非: 你看下这个对你有没有帮助 http://bbs.csdn.net/topics/391971354
s实体类呢,肯定是可以的.空数组和空是2回事.但肯定没问题的
我也很奇怪,数组元素个数不为0的时候是可以反序列化的,只有其中一个数组的元素个数为0的时候就报错了
@寒子非: 用json.net试试吧.大家都用json.net的.这种情况是可以的序列化的
@吴瑞祥: 也试过了
JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings();
//jsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore;
//DateFormatHandling = DateFormatHandling.IsoDateFormat,
jsonSerializerSettings.MissingMemberHandling = MissingMemberHandling.Ignore;
jsonSerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
jsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore;
jsonSerializerSettings.DefaultValueHandling = DefaultValueHandling.Include;
jsonSerializerSettings.ObjectCreationHandling = ObjectCreationHandling.Auto;
jsonSerializerSettings.TypeNameHandling = TypeNameHandling.Auto;
cc = JsonConvert.DeserializeObject<CarClass>(reslut,jsonSerializerSettings);//
@寒子非: 弄那么多配置干嘛...直接范序列化试试.不行的话把list改成[]试试
@吴瑞祥: 谢谢,终于知道原因了,我把项目架构改成framework .NET4.0就可以了
这是C#?Java吧?这个字符串可以正确被解析为JSON
json的格式没错,但是我反序列化的时候报错
用的什么方法反序列化的?
public static T Deserialize<T>(string sJson) where T : class { System.Web.Script.Serialization.JavaScriptSerializer script = new System.Web.Script.Serialization.JavaScriptSerializer(); return script.Deserialize<T>(sJson); } CarClass cc = Deserialize<CarClass>(reslut);
@寒子非: 不明觉厉,你给car加个构造方法试试
@让我发会呆: 还是不行
@寒子非: 加个无参数的构造
@让我发会呆: 加的就是无参构造函数
把List<>换成数组试试
一样是不行
@寒子非: 我用了你的代码及json字符串试了下,发现是正常的啊。
@Daniel Cai: 谢谢,终于知道原因了,我把项目架构改成framework .NET4.0就可以了,是楼下帮忙找出了重要原因,所以分只能给楼下了。