Skip to content

Commit ebe51ba

Browse files
committed
Fixed invalid output when using PhpSerializiationOptions.NumericEnums = false
And added a few tests.
1 parent 5a36028 commit ebe51ba

File tree

5 files changed

+39
-7
lines changed

5 files changed

+39
-7
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Future:
22
- Improved deserialization performance.
3+
- Fixed invalid output when using PhpSerializiationOptions.NumericEnums = false
34

45
# 0.7.3:
56
- Fixed an issue with empty string deserialization, caused by the `EmptyStringToDefault` code in 0.7.2.

PhpSerializerNET.Test/TestEnum.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,13 @@ public void SerializeOne() {
4545
PhpSerialization.Serialize(IntEnum.A)
4646
);
4747
}
48+
49+
[TestMethod]
50+
public void SerializeString() {
51+
Assert.AreEqual(
52+
"s:1:\"A\";",
53+
PhpSerialization.Serialize(IntEnum.A, new PhpSerializiationOptions{NumericEnums = false})
54+
);
55+
}
4856
}
4957
}

PhpSerializerNET.Test/TestObjects.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public void DeserializesNamedClass() {
7373
[TestMethod]
7474
public void DeserializesStdClassToDynamic() {
7575
var anonymous = new { foo = "foo" };
76-
System.Console.WriteLine(anonymous.GetType().Name);
76+
7777
var result = (dynamic)PhpSerialization.Deserialize(
7878
"O:8:\"stdClass\":2:{s:4:\"John\";d:3.14;s:4:\"Jane\";d:2.718;}"
7979
);
@@ -85,20 +85,19 @@ public void DeserializesStdClassToDynamic() {
8585
[TestMethod]
8686
public void DeserializesStdClassToDictionary() {
8787
var anonymous = new { foo = "foo" };
88-
System.Console.WriteLine(anonymous.GetType().Name);
89-
var result = (dynamic)PhpSerialization.Deserialize(
88+
dynamic result = (PhpDynamicObject)PhpSerialization.Deserialize(
9089
"O:8:\"stdClass\":2:{s:4:\"John\";d:3.14;s:4:\"Jane\";d:2.718;}",
9190
new PhpDeserializationOptions() { StdClass = StdClassOption.Dynamic }
9291
);
9392

9493
Assert.AreEqual(3.14, result.John);
9594
Assert.AreEqual(2.718, result.Jane);
95+
Assert.AreEqual("stdClass",result.GetClassName());
9696
}
9797

9898
[TestMethod]
9999
public void DeserializesToSpecificClass() {
100100
var anonymous = new { foo = "foo" };
101-
System.Console.WriteLine(anonymous.GetType().Name);
102101
var result = PhpSerialization.Deserialize<NamedClass>(
103102
"O:8:\"stdClass\":2:{s:4:\"John\";d:3.14;s:4:\"Jane\";d:2.718;}",
104103
new PhpDeserializationOptions() { StdClass = StdClassOption.Dynamic }
@@ -111,7 +110,6 @@ public void DeserializesToSpecificClass() {
111110
[TestMethod]
112111
public void DeserializesToSpecificStruct() {
113112
var anonymous = new { foo = "foo" };
114-
System.Console.WriteLine(anonymous.GetType().Name);
115113
var result = PhpSerialization.Deserialize<MyStruct>(
116114
"O:8:\"stdClass\":2:{s:4:\"John\";d:3.14;s:4:\"Jane\";d:2.718;}",
117115
new PhpDeserializationOptions() { StdClass = StdClassOption.Dynamic }
@@ -124,7 +122,6 @@ public void DeserializesToSpecificStruct() {
124122
[TestMethod]
125123
public void DeserializesToSpecifiedDictionary() {
126124
var anonymous = new { foo = "foo" };
127-
System.Console.WriteLine(anonymous.GetType().Name);
128125
var result = PhpSerialization.Deserialize<Dictionary<string, object>>(
129126
"O:8:\"stdClass\":2:{s:4:\"John\";d:3.14;s:4:\"Jane\";d:2.718;}",
130127
new PhpDeserializationOptions() { StdClass = StdClassOption.Dynamic }
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
This Source Code Form is subject to the terms of the Mozilla Public
3+
License, v. 2.0. If a copy of the MPL was not distributed with this
4+
file, You can obtain one at http://mozilla.org/MPL/2.0/.
5+
**/
6+
7+
using System.Collections;
8+
using System.Collections.Generic;
9+
using Microsoft.VisualStudio.TestTools.UnitTesting;
10+
11+
namespace PhpSerializerNET.Test {
12+
[TestClass]
13+
public class TestPhpDateTime {
14+
[TestMethod]
15+
public void DeserializesDictionary() {
16+
var result = PhpSerialization.Deserialize(
17+
"O:8:\"DateTime\":3:{s:4:\"date\";s:26:\"2021-08-18 09:10:23.441055\";s:13:\"timezone_type\";i:3;s:8:\"timezone\";s:3:\"UTC\";}"
18+
);
19+
20+
Assert.IsInstanceOfType(result, typeof(PhpDateTime));
21+
var date = result as PhpDateTime;
22+
Assert.AreEqual("UTC", date.Timezone);
23+
Assert.AreEqual("2021-08-18 09:10:23.441055", date.Date);
24+
}
25+
}
26+
}

PhpSerializerNET/PhpSerializer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public string Serialize(object input) {
3131
if (this._options.NumericEnums) {
3232
return $"i:{enumValue.GetNumericString()};";
3333
} else {
34-
return $"i:{enumValue.ToString()};";
34+
return Serialize(enumValue.ToString());
3535
}
3636
}
3737
case long longValue: {

0 commit comments

Comments
 (0)