lib/json: serialize `Array[nullable Serializable]` as any other arrays
[nit.git] / lib / json / serialization.nit
index f2758b3..be9ee8c 100644 (file)
@@ -311,7 +311,11 @@ class JsonDeserializer
                return object
        end
 
-       redef fun deserialize do return convert_object(root)
+       redef fun deserialize
+       do
+               errors.clear
+               return convert_object(root)
+       end
 end
 
 redef class Serializable
@@ -407,9 +411,7 @@ redef class SimpleCollection[E]
                        v.stream.write id.to_s
                        v.stream.write """, "__class": """"
                        v.stream.write class_name
-                       v.stream.write """", "__length": """
-                       v.stream.write length.to_s
-                       v.stream.write """, "__items": """
+                       v.stream.write """", "__items": """
                end
 
                serialize_to_pure_json v
@@ -426,28 +428,15 @@ redef class SimpleCollection[E]
                        v.notify_of_creation self
                        init
 
-                       var length = v.deserialize_attribute("__length").as(Int)
                        var arr = v.path.last["__items"].as(SequenceRead[nullable Object])
-                       for i in length.times do
-                               var obj = v.convert_object(arr[i])
+                       for o in arr do
+                               var obj = v.convert_object(o)
                                self.add obj
                        end
                end
        end
 end
 
-redef class Array[E]
-       redef fun serialize_to_json(v)
-       do
-               if v.plain_json or class_name == "Array[nullable Serializable]" then
-                       # Using class_name to get the exact type,
-                       # we do not want Array[Int] or anything else here.
-
-                       serialize_to_pure_json v
-               else super
-       end
-end
-
 redef class Map[K, V]
        redef fun serialize_to_json(v)
        do