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

Commit e0c314d

Browse files
nad-aumythz
authored andcommitted
Support IReadOnlyDictionary in FromObjectDictionary (#508)
1 parent 4cbe312 commit e0c314d

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

src/ServiceStack.Text/PlatformExtensions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -674,9 +674,9 @@ public static Dictionary<string, object> ToObjectDictionary(this object obj)
674674
return dict;
675675
}
676676

677-
public static object FromObjectDictionary(this Dictionary<string, object> values, Type type)
677+
public static object FromObjectDictionary(this IReadOnlyDictionary<string, object> values, Type type)
678678
{
679-
var alreadyDict = type == typeof(Dictionary<string, object>);
679+
var alreadyDict = type == typeof(IReadOnlyDictionary<string, object>);
680680
if (alreadyDict)
681681
return true;
682682

@@ -696,7 +696,7 @@ public static object FromObjectDictionary(this Dictionary<string, object> values
696696
return to;
697697
}
698698

699-
public static T FromObjectDictionary<T>(this Dictionary<string, object> values)
699+
public static T FromObjectDictionary<T>(this IReadOnlyDictionary<string, object> values)
700700
{
701701
return (T)values.FromObjectDictionary(typeof(T));
702702
}

tests/ServiceStack.Text.Tests/AutoMappingObjectDictionaryTests.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections.Generic;
2+
using System.Collections.ObjectModel;
23
using Northwind.Common.DataModel;
34
using NUnit.Framework;
45

@@ -79,6 +80,25 @@ public void Can_Convert_from_ObjectDictionary_with_Different_Types_with_camelCas
7980
Assert.That(fromDict.Car.Name, Is.EqualTo("SubCar"));
8081
}
8182

83+
[Test]
84+
public void Can_Convert_from_ObjectDictionary_with_Read_Only_Dictionary()
85+
{
86+
var map = new Dictionary<string, object>
87+
{
88+
{ "FirstName", 1 },
89+
{ "LastName", true },
90+
{ "Car", new SubCar { Age = 10, Name = "SubCar", Custom = "Custom"} },
91+
};
92+
93+
var readOnlyMap = new ReadOnlyDictionary<string, object>(map);
94+
95+
var fromDict = (User)readOnlyMap.FromObjectDictionary(typeof(User));
96+
Assert.That(fromDict.FirstName, Is.EqualTo("1"));
97+
Assert.That(fromDict.LastName, Is.EqualTo(bool.TrueString));
98+
Assert.That(fromDict.Car.Age, Is.EqualTo(10));
99+
Assert.That(fromDict.Car.Name, Is.EqualTo("SubCar"));
100+
}
101+
82102
public class QueryCustomers : QueryDb<Customer>
83103
{
84104
public string CustomerId { get; set; }

0 commit comments

Comments
 (0)