Przeglądaj źródła

Fixing object instance json parsing

Sebastien Ros 12 lat temu
rodzic
commit
08de54d4cf

+ 1 - 1
Jint.Repl/Program.cs

@@ -21,7 +21,7 @@ namespace Jint.Repl
                 }
 
                 var result = engine.GetValue(engine.Execute(input));
-                var str = engine.JSON.Stringify(engine.JSON, Arguments.From(result, Undefined.Instance, "\t"));
+                var str = engine.JSON.Stringify(engine.JSON, Arguments.From(result, Undefined.Instance, "  "));
                 Console.ForegroundColor = ConsoleColor.Magenta;
                 Console.WriteLine("=> {0}", str);
             }

+ 1 - 1
Jint/Native/Json/JsonParser.cs

@@ -629,7 +629,7 @@ namespace Jint.Native.Json
                 Expect(":");
                 var value = ParseJsonValue();
 
-                obj.FastSetProperty(name, new DataDescriptor(value));
+                obj.FastAddProperty(name, value, true, true, true);
                 
                 if (!Match("}"))
                 {

+ 23 - 12
Jint/Native/Json/JsonSerializer.cs

@@ -255,15 +255,21 @@ namespace Jint.Native.Json
             {
                 return "[]";
             }
-            
-            var separator = ",";
-            if (_gap != "")
+
+            string final;
+            if (_gap == "")
             {
-                separator += "\n" + _indent;
+                var separator = ",";
+                var properties = System.String.Join(separator, partial.ToArray());
+                final = "[" + properties + "]";
             }
-
-            var properties = System.String.Join(separator, partial.ToArray());
-            string final = "[" + properties + "]";
+            else
+            {
+                var separator = ",\n" + _indent;
+                var properties = System.String.Join(separator, partial.ToArray());
+                final = "[\n" + _indent + properties + "\n" + stepback + "]";
+            }
+            
             _stack.Pop();
             _indent = stepback;
             return final;
@@ -316,13 +322,18 @@ namespace Jint.Native.Json
             }
             else
             {
-                var separator = ",";
-                if (_gap != "")
+                if (_gap == "")
                 {
-                    separator += "\n" + _indent;
+                    var separator = ",";
+                    var properties = System.String.Join(separator, partial.ToArray());
+                    final = "{" + properties + "}";
                 }
-                var properties = System.String.Join(separator, partial.ToArray());
-                final = "{" + properties + "}";
+                else
+                {
+                    var separator = ",\n" + _indent;
+                    var properties = System.String.Join(separator, partial.ToArray());
+                    final = "{\n" + _indent + properties + "\n" + stepback + "}";
+                }                
             }
             _stack.Pop();
             _indent = stepback;