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))
{
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;