javascript自定义转换器反序列化json数组

时间:2013-02-06 12:02:29

标签: c# json

我有一个包含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”。

我错过了什么?

感谢。

1 个答案:

答案 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字符串(错误消息可能暗示这种问题)。