Bug 4242

Summary: JavaScriptSerializer should use invariant culture
Product: [Mono] Class Libraries Reporter: Denis Lebedenko <denisv>
Component: System.WebAssignee: Bugzilla <bugzilla>
Status: RESOLVED FIXED    
Severity: normal CC: alkpli, imbleedingme, mono-bugs+mono, mz, peter
Priority: ---    
Version: master   
Target Milestone: Untriaged   
Hardware: PC   
OS: Linux   
Tags: Is this bug a regression?: ---
Last known good build:

Description Denis Lebedenko 2012-04-04 18:40:25 UTC
It seems that the System.Web.Script.Serialization.JavaScriptSerializer class from the System.Web.Extensions assembly is using the current culture instead of the invariant culture for serialization and deserialization. This leads to incorrectly serialized floating-point numbers on cultures that use comma instead of a point as the decimal symbol.

Mono versions: Git 5091f779533227461caef216b56ccad071bd6cab, Debian 2.10.8.1-1

Steps to reproduce:

[mono] /tmp/serializationtest @ cat test.cs
using System;
using System.Globalization;
using System.Threading;
using System.Web.Script.Serialization;

class Program
{
        static void Main()
        {
                Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
                Test();

                Thread.CurrentThread.CurrentCulture = new CultureInfo("lt-LT");
                Test();
        }

        static void Test()
        {
                JavaScriptSerializer serializer = new JavaScriptSerializer();

                double[] array = new[] { 123.456, 0.78901 };

                string arrayJson = serializer.Serialize(array);
                Console.WriteLine(arrayJson);

        }
}
[mono] /tmp/serializationtest @ dmcs test.cs -r:System.Web.Extensions
[mono] /tmp/serializationtest @ mono test.exe

Output:

[123.456,0.78901]
[123,456,0,78901]

Expected the same output as on MS .NET:

[123.456,0.78901]
[123.456,0.78901]
Comment 1 mz 2012-05-23 04:30:14 UTC
JavaScriptDeserializer suffers the same problem.
Comment 2 Hari Menon 2015-01-05 15:09:42 UTC
Are there any changes to the status of this bug? 

I am facing the issues mentioned in this thread when trying to deserialize using System.Web.Script.Serialization.JavaScriptSerializer on Mono on Ubuntu.

Are there any known workarounds to make the JavaScriptSerializer serialize/deserialize using CultureInfo.InvariantCulture ?

Thanks!
Comment 3 Peter Hagen 2015-10-16 11:10:46 UTC
I think I ran into the same issue, with deserializing double, float and decimal values. This on with mono 4.0.4(.1)
Comment 4 Alexander Köplinger [MSFT] 2016-04-01 12:19:10 UTC
Fixed by merging pull request https://github.com/mono/mono/pull/1086.