Fix for deserialization of Guid and Nullable types

This commit is contained in:
2016-12-25 17:31:05 +01:00
parent 141d1e8640
commit 40795503a6

View File

@@ -78,7 +78,23 @@ namespace VAR.Json
{ {
if (obj.ContainsKey(prop.Name)) if (obj.ContainsKey(prop.Name))
{ {
prop.SetValue(newObj, Convert.ChangeType(obj[prop.Name], prop.PropertyType), null); Type underliningType = Nullable.GetUnderlyingType(prop.PropertyType);
Type effectiveType = underliningType ?? prop.PropertyType;
object valueOrig = obj[prop.Name];
object valueDest;
if (underliningType != null && valueOrig == null)
{
valueDest = null;
}
else if (effectiveType == typeof(Guid) && valueOrig is string)
{
valueDest = new Guid((string)valueOrig);
}
else
{
valueDest = Convert.ChangeType(obj[prop.Name], effectiveType);
}
prop.SetValue(newObj, valueDest, null);
} }
} }
return newObj; return newObj;