我有一个包含long数组的对象模型,我正在使用自定义javascript转换器和javascript序列化程序类对包含数组的json字符串进行反序列化。
我认为这样可行,但事实并非如此:
List<long> TheList = new List<long>;
if (dictionary.ContainsKey("TheArray") && dictionary["TheArray"] != null)
{
TheList = serializer.ConvertToType<List<long>>(dictionary["TheArray"]); //bug
TheObject.TheObjectList = (from s in TheList
select Convert.ToInt64(s)).ToList<long>();
}
错误在TheList = serializer.ConvertToType...
行,错误消息为:
无法将“System.String”类型的对象转换为类型 'System.Collections.Generic.List`1 [System.Int64]'
我也试过这个:
var TheStringArray = serializer.ConvertToType<string>(dictionary["TheArray"]);
TheObject.TheObjectList = (from s in TheStringArray.Split(',')
select Convert.ToInt64(s)).ToList<long>();
但后来我收到此错误消息:
对于数组的反序列化,不支持类型“System.String”。
我错过了什么?
感谢。
答案 0 :(得分:1)
JavaScriptConverter
ArrayList
可以看到List<long> theArray = null;
if (dictionary.ContainsKey("TheArray") && dictionary["TheArray"] is ArrayList)
{
theArray = new List<long>();
ArrayList serializedTheArray = (ArrayList)dictionary["TheArray"];
foreach (object serializedTheArrayItem in serializedTheArray)
{
if (serializedTheArrayItem is Int64)
theArray.Add((long)serializedTheArrayItem);
}
}
数组,您可以像这样进行反序列化:
TheArray
如果JSON中存在某些意外的意外情况,这将执行所有类型的检查。当然它假设JSON中的{{1}}属性实际上包含一个数组,而不是代表数组的内部JSON字符串(错误消息可能暗示这种问题)。