Ejemplo n.º 1
0
        /// <summary>
        /// Use for a client validation. Server contract is determined automatically by MapFromContractAttribute
        /// </summary>
        public static bool CheckClientMatchesServer <TClientData>(out FieldMismatch[] fieldMismatches)
        {
            var mapFromContractAttribute = ReflectionProvider.FindMapFromContractAttribute(typeof(TClientData));

            if (mapFromContractAttribute == null)
            {
                var message = $"Type {typeof(TClientData)} should have {nameof(MapFromContractAttribute)} attribute";
                throw new InvalidOperationException(message);
            }
            var serverType = mapFromContractAttribute.DataContractType;

            fieldMismatches = ResponseSpecificationMatcher.FindClientFieldMismatches(typeof(TClientData), serverType);
            return(fieldMismatches.Length == 0);
        }
        private static TreeNode TraverseWithoutCaching(Type type, Stack <Type> traverseStack)
        {
            if (IsSimpleType(type))
            {
                return(TreeNode.Empty);
            }

            if (ReflectionProvider.TryGetDictionaryValueType(type, out var valueType))
            {
                return(TreeNode.Dictionary(TraverseWithCaching(valueType, traverseStack)));
            }

            if (ReflectionProvider.TryGetEnumerableElementType(type, out var elementType))
            {
                return(TreeNode.Collection(TraverseWithCaching(elementType, traverseStack)));
            }

            var properties = ReflectionProvider.GetProperties(type)
                             .Select(p => new ObjectProperty(p, TraverseWithCaching(p.PropertyType, traverseStack)))
                             .ToArray();

            return(TreeNode.Object(properties));
        }
Ejemplo n.º 3
0
 public ObjectProperty(PropertyInfo property, TreeNode tree)
 {
     ResponseName   = ReflectionProvider.GetPropertyResponseName(property);
     Tree           = tree;
     propertyGetter = DelegateGenerator.GeneratePropertyGetter(property);
 }