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

Commit cc03cd3

Browse files
committed
Resolve issue with deserializing List<object> in JSV
1 parent 85482b0 commit cc03cd3

File tree

4 files changed

+41
-3
lines changed

4 files changed

+41
-3
lines changed

src/ServiceStack.Text/Common/DeserializeDictionary.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ public static IDictionary<TKey, TValue> ParseDictionary<TKey, TValue>(
232232
: (IDictionary<TKey, TValue>)createMapType.CreateInstance();
233233

234234
var objDeserializer = Json.JsonTypeSerializer.Instance.ObjectDeserializer;
235-
if (to is Dictionary<string, object> && objDeserializer != null)
235+
if (to is Dictionary<string, object> && objDeserializer != null && typeof(TSerializer) == typeof(Json.JsonTypeSerializer))
236236
return (IDictionary<TKey,TValue>) objDeserializer(value);
237237

238238
var config = JsConfig.GetConfig();

src/ServiceStack.Text/Common/DeserializeListWithElements.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ public static ICollection<T> ParseGenericList(ReadOnlySpan<char> value, Type cre
167167
: (ICollection<T>)createListType.CreateInstance();
168168

169169
var objSerializer = Json.JsonTypeSerializer.Instance.ObjectDeserializer;
170-
if (to is List<object> && objSerializer != null)
170+
if (to is List<object> && objSerializer != null && typeof(TSerializer) == typeof(Json.JsonTypeSerializer))
171171
return (ICollection<T>)objSerializer(value);
172172

173173
if ((value = DeserializeListWithElements<TSerializer>.StripList(value)).IsEmpty)

src/ServiceStack.Text/Common/DeserializeType.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public static object ObjectStringToType(ReadOnlySpan<char> strType)
9393
if (primitiveType != null)
9494
return primitiveType;
9595

96-
if (Serializer.ObjectDeserializer != null)
96+
if (Serializer.ObjectDeserializer != null && typeof(TSerializer) == typeof(Json.JsonTypeSerializer))
9797
return Serializer.ObjectDeserializer(strType);
9898

9999
return Serializer.UnescapeString(strType).Value();

tests/ServiceStack.Text.Tests/JsonTests/JsonObjectTests.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Globalization;
4+
using System.Runtime.Serialization;
45
using System.Threading;
56
using NUnit.Framework;
67

@@ -544,5 +545,42 @@ public void Can_deserialize_unknown_ObjectList()
544545

545546
JS.UnConfigure();
546547
}
548+
549+
[DataContract]
550+
public class BrowseProtocolTemplateResponseLight
551+
{
552+
[DataMember(Name = "ProtocolTemplateId")]
553+
public Guid Oid { get; set; }
554+
555+
[DataMember]
556+
public string Name { get; set; }
557+
558+
[DataMember]
559+
public string Title { get; set; }
560+
561+
[DataMember]
562+
public string Description { get; set; }
563+
564+
[DataMember]
565+
public List<object> ProtocolBusinessObjects { get; set; }
566+
567+
[DataMember]
568+
public ResponseStatus ResponseStatus { get; set; }
569+
}
570+
571+
[Test]
572+
public void Can_deserialize_JSV_List_object_when_ObjectDeserializer_is_configured()
573+
{
574+
JS.Configure();
575+
576+
var json = @"{ ProtocolTemplateId:d7f0aa3afd834e90aaa9a97b7efd0c03,Name: Rendezvényszervezés,Title: Test,Description: Rendezvényszervezés,ProtocolBusinessObjects:[[{ Oid: 3c229e70345f11e9bf726dd67bf32ebd,ObjectType: AwaitObject,Flags: 18,Name: AwaitObject1,Title: AwaitObject1,SecondaryTitle: AwaitObject1,Description: "",OwnerType: 1,Owner: { UserId: 2,DisplayName: System},DeadlineType: 2,DeadlineOffsetDays: 1,Priority: 2,PriorityToData: False,DeadlineToData: False,CompletedDateToData: False,OwnerToData: False,Visible: False,ProtocolTemplateId: d7f0aa3afd834e90aaa9a97b7efd0c03,ProtocolTemplateGroupId: e44dfc5da20942fe8532d6446ef0b76c,CreatedBy: { UserId: 4,DisplayName: Wiszt Máté},CreatedDateTime: 2019 - 03 - 21T15: 05:41.0929542 + 01:00}]]}";
577+
578+
var ret = json.FromJsv<BrowseProtocolTemplateResponseLight>();
579+
580+
Assert.That(ret.ProtocolBusinessObjects.Count, Is.GreaterThan(0));
581+
582+
JS.UnConfigure();
583+
}
584+
547585
}
548586
}

0 commit comments

Comments
 (0)