This is Xamarin's bug tracking system. For product support, please use the support links listed in your Xamarin Account.
Bug 4242 - JavaScriptSerializer should use invariant culture
Summary: JavaScriptSerializer should use invariant culture
Status: RESOLVED FIXED
Alias: None
Product: Class Libraries
Classification: Mono
Component: Sys.Web (show other bugs)
Version: Trunk
Hardware: PC Linux
: --- normal
Target Milestone: ---
Assignee: Bugzilla
URL:
Depends on:
Blocks:
 
Reported: 2012-04-04 18:40 UTC by Denis Lebedenko
Modified: 2016-04-01 12:19 UTC (History)
5 users (show)

See Also:
Tags:
Is this bug a regression?: ---
Last known good build:


Attachments

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 2016-04-01 12:19:10 UTC
Fixed by merging pull request https://github.com/mono/mono/pull/1086.

Note You need to log in before you can comment on or make changes to this bug.