Skip to content

Commit d0a080e

Browse files
Avoid printing duplicate messages when deserializing an invalid JSON
1 parent 9f26e87 commit d0a080e

File tree

5 files changed

+31
-9
lines changed

5 files changed

+31
-9
lines changed

dotnet/src/dotnetframework/GxClasses/Core/GXUtilsCommon.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5455,15 +5455,22 @@ public static void ErrorToMessages(string errorId, string errorDescription, GXBa
54555455
}
54565456
}
54575457
public static void ErrorToMessages(string errorId, Exception ex, GXBaseCollection<SdtMessages_Message> Messages)
5458+
{
5459+
ErrorToMessages(errorId, ex, Messages, true);
5460+
}
5461+
internal static void ErrorToMessages(string errorId, Exception ex, GXBaseCollection<SdtMessages_Message> Messages, bool parseInnerExceptions)
54585462
{
54595463
if (Messages != null && ex != null)
54605464
{
54615465
StringBuilder str = new StringBuilder();
54625466
str.Append(ex.Message);
5463-
while (ex.InnerException != null)
5467+
if (parseInnerExceptions)
54645468
{
5465-
str.Append(ex.InnerException.Message);
5466-
ex = ex.InnerException;
5469+
while (ex.InnerException != null)
5470+
{
5471+
str.Append(ex.InnerException.Message);
5472+
ex = ex.InnerException;
5473+
}
54675474
}
54685475
ErrorToMessages(errorId, str.ToString(), Messages);
54695476
}

dotnet/src/dotnetframework/GxClasses/Domain/GxCollections.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ public bool FromJSonString(string s, GXBaseCollection<SdtMessages_Message> Messa
238238
}
239239
catch (Exception ex)
240240
{
241-
GXUtil.ErrorToMessages("FromJson Error", ex, Messages);
241+
GXUtil.ErrorToMessages("FromJson Error", ex, Messages, false);
242242
return false;
243243
}
244244
}
@@ -709,7 +709,7 @@ public bool FromJSonString(string s, GXBaseCollection<SdtMessages_Message> Messa
709709
}
710710
catch (Exception ex)
711711
{
712-
GXUtil.ErrorToMessages("FromJson Error", ex, Messages);
712+
GXUtil.ErrorToMessages("FromJson Error", ex, Messages, false);
713713
return false;
714714
}
715715
}
@@ -1270,7 +1270,7 @@ public bool FromJSonString(string s, GXBaseCollection<SdtMessages_Message> Messa
12701270
}
12711271
catch (Exception ex)
12721272
{
1273-
GXUtil.ErrorToMessages("FromJson Error", ex, Messages);
1273+
GXUtil.ErrorToMessages("FromJson Error", ex, Messages, false);
12741274
return false;
12751275
}
12761276
}

dotnet/src/dotnetframework/GxClasses/Domain/GxGenericCollections.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,7 @@ public bool FromJSonString(string s, GXBaseCollection<SdtMessages_Message> Messa
472472
}
473473
catch (Exception ex)
474474
{
475-
GXUtil.ErrorToMessages("FromJson Error", ex, Messages);
475+
GXUtil.ErrorToMessages("FromJson Error", ex, Messages, false);
476476
return false;
477477
}
478478
}

dotnet/src/dotnetframework/GxClasses/Helpers/JSONHelper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ public static T ReadJSON<T>(string json, GXBaseCollection<SdtMessages_Message> M
185185
}
186186
catch (Exception ex)
187187
{
188-
GXUtil.ErrorToMessages("FromJson Error", ex, Messages);
188+
GXUtil.ErrorToMessages("FromJson Error", ex, Messages, false);
189189
GXLogging.Error(log, "FromJsonError ", ex);
190190
return default(T);
191191
}
@@ -207,7 +207,7 @@ public static T ReadJavascriptJSON<T>(string json, GXBaseCollection<SdtMessages_
207207
}
208208
catch (Exception ex)
209209
{
210-
GXUtil.ErrorToMessages("FromJson Error", ex, Messages);
210+
GXUtil.ErrorToMessages("FromJson Error", ex, Messages, false);
211211
GXLogging.Error(log, "FromJsonError ", ex);
212212
return default(T);
213213
}

dotnet/test/DotNetCoreUnitTest/StringUtil/JsonUtilTest.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,21 @@ namespace xUnitTesting
1313
{
1414
public class JsonUtilTest
1515
{
16+
[Fact]
17+
public void DeserializationInvalidJsonNoDuplicateError()
18+
{
19+
string invalidJson1 = "{\"id\":1,\"name\":\"uno\",\"date\":\"2016-02-24\"'";
20+
GXBaseCollection<SdtMessages_Message> messages = new GXBaseCollection<SdtMessages_Message>();
21+
JSONHelper.ReadJSON<JObject>(invalidJson1, messages);
22+
string errMessage = messages.ToJSonString();
23+
#if NETCORE
24+
string expectedError = "[{\"Id\":\"FromJson Error\",\"Type\":1,\"Description\":\"''' is invalid after a value. Expected either ',', '}', or ']'. Path: $.date | LineNumber: 0 | BytePositionInLine: 40.\"}]";
25+
#else
26+
string expectedError = "[{\"Id\":\"FromJson Error\",\"Type\":1,\"Description\":\"Expected a ',' or '}'.\"}]";
27+
#endif
28+
Assert.Equal(expectedError, errMessage);
29+
}
30+
1631
[Fact]
1732
public void SerializationWithDateTimes()
1833
{

0 commit comments

Comments
 (0)