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