protected static ObjectGraph getGraph(IMaybe <object> anyObject, string childName, Type childType, Predicate <string> exclude, StringStringHash signatures) { var obj = assert(() => anyObject).Must().HaveValue().Value; if (childType.IsArray) { var array = (Array)obj; var list = new List <string>(); for (var i = 0; i < array.Length; i++) { list.Add(array.GetValue(i).ToNonNullString()); } return(new ObjectGraph(childName, $"[{list.ToString(", ")}]")); } else if (obj is FileName || obj is FolderName) { return(new ObjectGraph(childName, obj.ToString())); } else if (!(obj is IConvertible)) { return(Serialize(obj, exclude, signatures)); } else { return(new ObjectGraph(childName, obj.ToNonNullString())); } }
public static ObjectGraph Serialize(object obj, Predicate <string> exclude, StringStringHash signatures) { assert(() => obj).Must().Not.BeNull().OrThrow(); var graph = RootObjectGraph(); var type = obj.GetType(); var evaluator = new PropertyEvaluator(obj); var infos = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetProperty); foreach (var info in infos) { var signature = info.Name; var childName = signature.ToCamel(); if (evaluator.Attribute <SignatureAttribute>(signature).If(out var a)) { childName = a.Signature; } if (exclude(signature)) { continue; } if (((IHash <string, object>)evaluator).If(signature, out var objectValue)) { if (objectValue.IsNull()) { continue; } var childType = evaluator.Type(signature); graph[childName] = getGraph(objectValue.Some(), childName, childType, exclude, signatures); } } return(graph); }
public static void SetObject(this FileName fileName, object obj, StringStringHash signatures) { fileName.SetObject(obj, sig => false, signatures); }
public static void SetObject(this FileName fileName, object obj, Predicate <string> exclude, StringStringHash signatures) { fileName.Text = Serialize(obj, exclude, signatures).ToString(); }
public static ObjectGraph Serialize(object obj, StringStringHash signatures) => Serialize(obj, sig => false, signatures);
public static IResult <ObjectGraph> Serialize(object obj, StringStringHash signatures) { return(Serialize(obj, sig => false, signatures)); }
public static IResult <ObjectGraph> Serialize(object obj, Predicate <string> exclude, StringStringHash signatures) { return(tryTo(() => ObjectGraph.Serialize(obj, exclude, signatures))); }