使用DataContractJsonSerializer发序列化对象时出现的异常
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用DataContractJsonSerializer发序列化对象时出现的异常相关的知识,希望对你有一定的参考价值。
最近服务器上的某个程序的错误日志中频繁出现以下异常:
Deserialising: There was an error deserializing the object of type {type}.
The token ‘"‘ was expected but found ‘‘
通过分析发现是使用DataContractJsonSerializer发序列化对象时出现的异常
但是把日志中出错的json串拷贝到本机测试时又没有问题,很是费解,最后在网上找到了解决办法
我的反序列化的代码如下:
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T)); MemoryStream ms = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(json.ToCharArray())); T obj = (T)serializer.ReadObject(ms); ms.Close();
错误原因是因为json串种含有大量非ANSI的字符,解决办法如下:
byte[] result = Encoding.UTF8.GetBytes(json); using (var jsonReader = JsonReaderWriterFactory.CreateJsonReader(result, XmlDictionaryReaderQuotas.Max)) { var serializer = new DataContractJsonSerializer(typeof(T)); T obj = (T)serializer.ReadObject(jsonReader); return obj; }
通过测试,异常解决。
以上是关于使用DataContractJsonSerializer发序列化对象时出现的异常的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)