Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 6fde44c

Browse files
committed
Merge pull request #357 from flq/culture_issue
Culture issue
2 parents e22abd6 + 26b1d81 commit 6fde44c

File tree

6 files changed

+39
-1
lines changed

6 files changed

+39
-1
lines changed

src/ServiceStack.Text/Common/ITypeSerializer.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ internal interface ITypeSerializer
2020
void WriteObjectString(TextWriter writer, object value);
2121
void WriteException(TextWriter writer, object value);
2222
void WriteString(TextWriter writer, string value);
23+
void WriteFormattableObjectString(TextWriter writer, object value);
2324
void WriteDateTime(TextWriter writer, object oDateTime);
2425
void WriteNullableDateTime(TextWriter writer, object dateTime);
2526
void WriteDateTimeOffset(TextWriter writer, object oDateTimeOffset);

src/ServiceStack.Text/Common/JsWriter.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,9 @@ public WriteObjectDelegate GetValueTypeToStringMethod(Type type)
323323
? (WriteObjectDelegate)Serializer.WriteEnumFlags
324324
: Serializer.WriteEnum;
325325

326+
if (type.HasInterface(typeof (IFormattable)))
327+
return Serializer.WriteFormattableObjectString;
328+
326329
return Serializer.WriteObjectString;
327330
}
328331

src/ServiceStack.Text/Json/JsonTypeSerializer.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,12 @@ public void WriteObjectString(TextWriter writer, object value)
108108
JsonUtils.WriteString(writer, value != null ? value.ToString() : null);
109109
}
110110

111+
public void WriteFormattableObjectString(TextWriter writer, object value)
112+
{
113+
var formattable = value as IFormattable;
114+
JsonUtils.WriteString(writer, formattable != null ? formattable.ToString(null, CultureInfo.InvariantCulture) : null);
115+
}
116+
111117
public void WriteException(TextWriter writer, object value)
112118
{
113119
WriteString(writer, ((Exception)value).Message);

src/ServiceStack.Text/Jsv/JsvTypeSerializer.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,13 @@ public void WriteString(TextWriter writer, string value)
8888
writer.Write(value.EncodeJsv());
8989
}
9090

91-
public void WriteDateTime(TextWriter writer, object oDateTime)
91+
public void WriteFormattableObjectString(TextWriter writer, object value)
92+
{
93+
var f = (IFormattable)value;
94+
writer.Write(f.ToString(null,CultureInfo.InvariantCulture).EncodeJsv());
95+
}
96+
97+
public void WriteDateTime(TextWriter writer, object oDateTime)
9298
{
9399
writer.Write(DateTimeSerializer.ToShortestXsdDateTimeString((DateTime)oDateTime));
94100
}

tests/ServiceStack.Text.Net40.Tests/ServiceStack.Text.Net40.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
<Reference Include="Microsoft.CSharp" />
6969
<Reference Include="System.Data" />
7070
<Reference Include="System.Xml" />
71+
<Reference Include="WindowsBase" />
7172
</ItemGroup>
7273
<ItemGroup>
7374
<Compile Include="..\ServiceStack.Text.Tests\AdhocModelTests.cs">

tests/ServiceStack.Text.Tests/StructTests.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Drawing;
4+
using System.Globalization;
35
using System.Linq;
6+
using System.Threading;
7+
using System.Windows;
48
using NUnit.Framework;
59
using ServiceStack.Text.Common;
610

@@ -253,6 +257,23 @@ public void StaticParseMethod_will_not_throw_on_unstandard_usage()
253257
Assert.DoesNotThrow(() => ret = StaticParseMethod<DangerousText2>.Parse);
254258
Assert.IsNull(ret);
255259
}
260+
261+
[Test]
262+
[TestCase("en")]
263+
[TestCase("en-US")]
264+
[TestCase("de-CH")]
265+
[TestCase("de")]
266+
public void test_rect_different_cultures(string culture)
267+
{
268+
var currentCulture = CultureInfo.GetCultureInfo(culture);
269+
Thread.CurrentThread.CurrentCulture = currentCulture;
270+
Thread.CurrentThread.CurrentUICulture = currentCulture;
271+
var s = new JsonSerializer<Rect>();
272+
var r = new Rect(23, 34, 1024, 768);
273+
var interim = s.SerializeToString(r);
274+
var r2 = s.DeserializeFromString(interim);
275+
Assert.AreEqual(r, r2);
276+
}
256277
}
257278

258279
public struct UserStruct

0 commit comments

Comments
 (0)