QSharp.QNode[] SaveProp(object item, ImmutablePropertyInfo prop, bool isRef = false) { var child = prop.Value(item); if (IsCollectionType(prop.Type)) { if (child == null) { return(Array <QSharp.QNode> .Empty); } var elementType = Collection_ElementType(prop.Type); if (elementType == typeof(object)) { elementType = null; } return(child.As <System.Collections.IEnumerable>() .Cast <object>() .Select(element => Save(element, isRef, itemType: elementType)) .ToArray()); } else { return child != null ? new[] { Save(child, isRef, itemType: prop.ReducedType != typeof(object) ? prop.ReducedType : null) } } : Array <QSharp.QNode> .Empty; }
//static string ToText(int value) //{ // if (value == 0) // return "0"; // if (value == int.MinValue) // return int.MinValue.ToString(); // var isNegative = false; // if (value < 0) // { // isNegative = true; // value = -value; // } // var chars = new List<char>(); // for (;value > 0; ) // { // chars.Add((char)('0' + (value % 10))); // value /= 10; // } // if (isNegative) // chars.Add('-'); // chars.Reverse(); // return new string(chars.ToArray()); //} public object GetId(object item, ImmutablePropertyInfo idProperty) { if (idProperty == null) { return(null); } //var value = MetaTech.Library.ReflectionExtension.ReflectionHelper._P<object>(item, idProperty.Name); var value = idProperty.Value(item); if (value == null) { return(null); } if (IsPrimitiveType(idProperty.Type)) { return(value); } var type = idProperty.Type; var typeInfo = SerializeInfoByType(type); return(GetId(value, typeInfo.IdProperty)); }