private string GetSetObjectPropertyResponse(string address) { var queries = UrlUtilities.CrackUrl(address); PropertyCache cache; if (typeof(TObjectProperty) == typeof(ObjectProperty)) { cache = ObjectPropertyParser.GetPropertyInfoViaTypeLookup((Enum)(object)property); } else if (typeof(TObjectProperty) == typeof(ChannelProperty)) { cache = ObjectPropertyParser.GetPropertyInfoViaPropertyParameter <Channel>((Enum)(object)property); } else { throw new NotImplementedException($"Handler for object property type {nameof(TObjectProperty)} is not implemented"); } var queryName = ObjectPropertyParser.GetObjectPropertyNameViaCache((Enum)(object)property, cache); if (typeof(TObjectProperty) == typeof(ChannelProperty)) { queryName += "1"; //Channel ID used for tests } var val = queries[queryName]; Assert.IsTrue(val == expectedValue, $"The value of property '{property.ToString().ToLower()}' did not match the expected value. Expected '{expectedValue}', received: '{val}'"); return("OK"); }
protected override string GetParameterName(Enum property, PropertyCache cache) { //Underscore between property name and channelId is inserted by GetObjectPropertyNameViaCache var str = ObjectPropertyParser.GetObjectPropertyNameViaCache(property, cache); return($"{str}{channelId}"); }
private object DeserializeObjectPropertyInternal(Enum property, string rawValue) { var cache = ObjectPropertyParser.GetPropertyInfoViaTypeLookup(property); var rawName = ObjectPropertyParser.GetObjectPropertyNameViaCache(property, cache); return(XmlReflectionSerializerImpl.DeserializeRawPropertyValue(property, rawName, rawValue)); }
public string GetFactorParameterName(Enum property, PropertyCache cache) { var str = ObjectPropertyParser.GetObjectPropertyNameViaCache(property, cache); str = str.Replace("_factor", $"_{channelId}_factor"); return(str); }
private Expression GetCaseBody(Enum property, Expression rawValue) { var viaObject = false; var typeLookup = property.GetEnumAttribute <TypeLookupAttribute>()?.Class; //ObjectPropertyInternal members don't necessarily have a type lookup if (typeLookup == null) { return(null); } var mappings = ReflectionCacheManager.Map(typeLookup).Cache; var cache = ObjectPropertyParser.GetPropertyInfoViaTypeLookup(property); var xmlElement = cache.GetAttribute <XmlElementAttribute>(); //todo: what if this objectproperty doesnt point to a member with an xmlelementattribute? XmlMapping mapping = null; if (xmlElement != null) { mapping = mappings.FirstOrDefault(m => m.AttributeValue[0] == xmlElement.ElementName); } else { var mergeAttribute = property.GetEnumAttribute <MergeableAttribute>(); //If we're a property like LocationName, we don't exist server side - we're only used for constructing requests if (mergeAttribute != null) { return(null); } //We have a property like Interval which uses a backing property instead. //Get the backing property so that we may extract the real value from the public //property var rawName = ObjectPropertyParser.GetObjectPropertyNameViaCache(property, cache); var elementName = $"{HtmlParser.DefaultPropertyPrefix}{rawName.TrimEnd('_')}"; mapping = mappings.FirstOrDefault(m => m.AttributeValue[0] == elementName); if (mapping != null) { viaObject = true; } } if (mapping != null) { var deserializer = new ValueDeserializer(mapping, null, rawValue); var result = deserializer.Deserialize(); if (viaObject) { //Construct an expression like return new TableSettings { intervalStr = "60|60 seconds" }.Interval; var settingsObj = Expression.Variable(typeLookup, "obj"); var assignObj = settingsObj.Assign(Expression.New(typeLookup)); var internalProp = Expression.MakeMemberAccess(settingsObj, mapping.PropertyCache.Property); var assignInternal = internalProp.Assign(result); var externalProp = Expression.MakeMemberAccess(settingsObj, cache.Property); return(Expression.Block( new[] { settingsObj }, assignObj, assignInternal, Expression.Convert(externalProp, typeof(object)) )); } return(result); } //Property is not deserializable return(null); }
protected virtual string GetParameterName(Enum property, PropertyCache cache) { return(ObjectPropertyParser.GetObjectPropertyNameViaCache(property, cache)); }