Example #1
0
 private ApiModel ResolveApiArray(JsonArrayContract jsonArrayContract)
 {
     return(new ApiArray(
                type: jsonArrayContract.UnderlyingType,
                itemType: jsonArrayContract.CollectionItemType ?? typeof(object)));
 }
Example #2
0
 private static void PopulateArray(JArray jArray, JsonArrayContract arrayContract, IList source, IList target)
 {
     if (target.Count > 0 && target is IEnumerable <DirtyExtensibleObject> targetEnumerable)
     {
         var objectContract   = (JsonObjectContract)InternalPrivateContractResolver.ResolveContract(arrayContract.CollectionItemType);
         var sourceEnumerable = (IEnumerable <DirtyExtensibleObject>)source;
         for (var i = target.Count - 1; i >= 0; --i)
         {
             var targetItem = (DirtyExtensibleObject)target[i];
             var id         = ((IIdentifiable)targetItem)?.Id;
             if (!string.IsNullOrEmpty(id) && Extensions.IndexOf(sourceEnumerable, id) < 0)
             {
                 target.RemoveAt(i);
                 targetItem.ClearPropertyChangedEvent();
             }
         }
         for (var i = 0; i < source.Count; ++i)
         {
             var sourceItem = (DirtyExtensibleObject)source[i];
             var id         = ((IIdentifiable)sourceItem)?.Id;
             DirtyExtensibleObject existing = null;
             if (!string.IsNullOrEmpty(id))
             {
                 var index = Extensions.IndexOf(targetEnumerable, id);
                 if (index >= 0)
                 {
                     existing = (DirtyExtensibleObject)target[index];
                 }
             }
             if (existing != null)
             {
                 var index = i;
                 while (!ReferenceEquals(target[index], existing))
                 {
                     ++index;
                 }
                 if (index > i)
                 {
                     for (var j = i; j < index; ++j)
                     {
                         target[j + 1] = target[j];
                     }
                     target[i] = existing;
                 }
             }
             else
             {
                 if (i == target.Count)
                 {
                     target.Add(sourceItem);
                 }
                 else
                 {
                     existing = (DirtyExtensibleObject)target[i];
                     if (!string.IsNullOrEmpty(((IIdentifiable)existing)?.Id))
                     {
                         target.Insert(i, sourceItem);
                         existing = null;
                     }
                 }
             }
             if (existing != null)
             {
                 PopulateObject((JObject)jArray[i], objectContract, sourceItem, existing);
             }
         }
         for (var i = target.Count - 1; i >= source.Count; --i)
         {
             var targetItem = (DirtyExtensibleObject)target[i];
             target.RemoveAt(i);
             targetItem.ClearPropertyChangedEvent();
         }
     }
     else
     {
         target.Clear();
         foreach (var item in source)
         {
             target.Add(item);
         }
     }
 }
Example #3
0
 public static bool IsSelfReferencing(this JsonArrayContract arrayContract)
 {
     return(arrayContract.UnderlyingType == arrayContract.CollectionItemType);
 }