private static object ParseValue(object value, kCura.Relativity.Client.FieldType fieldType) { var vType = (value?.GetType() ?? null); if (value == null) { return(value); } if (value is ChoiceRef) { return(((ChoiceRef)value).ToRelativityChoice()); } else if (fieldType == kCura.Relativity.Client.FieldType.SingleChoice && ((vType == typeof(string)) || vType == typeof(JObject))) { return(Newtonsoft.Json.JsonConvert.DeserializeObject <ChoiceRef>(value?.ToString() ?? string.Empty).ToRelativityChoice()); } else if (value.IsEnumerableOf <ChoiceRef>()) { return(ParseMultiChoice(((IEnumerable <ChoiceRef>)value))); } else if (fieldType == kCura.Relativity.Client.FieldType.MultipleChoice && ((vType == typeof(string)) || vType == typeof(JArray))) { return(ParseMultiChoice(Newtonsoft.Json.JsonConvert.DeserializeObject <IEnumerable <ChoiceRef> >(value.ToString() ?? string.Empty))); } else if (value is RelativityObject) { var v = (RelativityObject)value; return(new RDO(v.ArtifactId)); } else if (value.IsEnumerableOf <RelativityObject>()) { var v = (IEnumerable <RelativityObject>)value; return(new FieldValueList <Artifact>(v.Select(x => new RDO(x.ArtifactId)).ToList())); } else if (fieldType == kCura.Relativity.Client.FieldType.SingleObject && (vType == typeof(JObject))) { var r = Newtonsoft.Json.JsonConvert.DeserializeObject <SerializedArtifact>(value?.ToString() ?? string.Empty); return(new Artifact(r.ArtifactId) { TextIdentifier = r.Name, Guids = r.Guids?.ToList() ?? new List <Guid>() }); } else if (fieldType == kCura.Relativity.Client.FieldType.MultipleObject && (vType == typeof(JArray))) { var r = Newtonsoft.Json.JsonConvert.DeserializeObject <IEnumerable <SerializedArtifact> >(value?.ToString() ?? string.Empty); return(new FieldValueList <Artifact>(r.Select(x => new Artifact(x.ArtifactId) { TextIdentifier = x.Name, Guids = x.Guids?.ToList() ?? new List <Guid>() }))); } else if (fieldType == kCura.Relativity.Client.FieldType.Decimal || fieldType == kCura.Relativity.Client.FieldType.Currency) { if (!decimal.TryParse(value?.ToString() ?? string.Empty, out var d)) { throw new NotSupportedException($"{value} cannot be parsed by decimal."); } return(d); } else if (fieldType == kCura.Relativity.Client.FieldType.WholeNumber) { if (!int.TryParse(value?.ToString() ?? string.Empty, out var d)) { throw new NotSupportedException($"{value} cannot be parsed by integer."); } return(d); } else if (fieldType == kCura.Relativity.Client.FieldType.User) { var r = Newtonsoft.Json.JsonConvert.DeserializeObject <SerializedArtifact>(value?.ToString() ?? string.Empty); return(new User(r.ArtifactId) { TextIdentifier = r.Name, Guids = r.Guids?.ToList() ?? new List <Guid>() }); } return(value); }
public void TODTODocument_FieldTypeIsPassedinValue_ReturnsCorrectValue(string type, kCura.Relativity.Client.FieldType expected) { //ARRANGE var doc = new RelativityObject(); var cGuid = Guid.NewGuid(); doc.FieldValues = new List <FieldValuePair>() { new FieldValuePair { Field = new FieldRef(123) { FieldType = type }, Value = new List <ChoiceRef> { new ChoiceRef("choice name") } } }; //ACT var result = doc.ToDTODocument(); //ASSERT Assert.Equal(expected, result.Fields.First().FieldType); }