internal static T ToThingBase <T>(this DocumentReference documentReference) where T : ThingBase, new() { T baseThing = new T(); Guid id; if (Guid.TryParse(documentReference.Id, out id)) { baseThing.Key = new ThingKey(id); } Guid version; if (documentReference.Meta != null && documentReference.Meta.VersionId != null && Guid.TryParse(documentReference.Meta.VersionId, out version)) { baseThing.Key.VersionStamp = version; } ThingFlags flags; var extensionFlag = documentReference.GetExtension(HealthVaultExtensions.FlagsFhirExtensionName); if (extensionFlag != null) { if (extensionFlag.Value is FhirString && Enum.TryParse <ThingFlags>((extensionFlag.Value as FhirString).ToString(), out flags)) { baseThing.Flags = flags; } } if (documentReference.Indexed.HasValue) { var indexed = documentReference.Indexed.Value; baseThing.EffectiveDate = new NodaTime.LocalDateTime(indexed.Year, indexed.Month, indexed.Day, indexed.Hour, indexed.Minute, indexed.Second); } return(baseThing); }