public void GetKey_Default() { var binder = new JsonBinder(); var values = binder.GetValues(new { a = new { b = new { value = "ABC" } } }); values.Should().Contain(x => x.Key == "a:b:value"); }
public void GetKey_CustomSep() { var binder = new JsonBinder("__"); var values = binder.GetValues(new { a = new { b = new { value = "ABC" } } }); values.Should().Contain(x => x.Key == "a__b__value"); }
IDictionary <string, EntityProperty> ITableEntity.WriteEntity(OperationContext operationContext) { var getter = getPropertyGetter(GetType()); var results = new Dictionary <string, EntityProperty>(); foreach (var(key, item) in _binder.GetValues(this)) { if (key == _rowKey || key == _partitionKey) { continue; } if (key == nameof(PartitionKey) || key == nameof(RowKey)) { continue; } EntityProperty entityProperty = null; switch (item.Type) { case JTokenType.Null: entityProperty = new EntityProperty((string)null); break; case JTokenType.Boolean: entityProperty = EntityProperty.GeneratePropertyForBool(item.Value <bool>()); break; case JTokenType.Date: entityProperty = EntityProperty.GeneratePropertyForDateTimeOffset(item.Value <DateTimeOffset>()); break; case JTokenType.Guid: entityProperty = EntityProperty.GeneratePropertyForGuid(item.Value <Guid>()); break; case JTokenType.Integer: switch (item.Value) { case short s: entityProperty = EntityProperty.GeneratePropertyForInt(s); break; case int i: entityProperty = EntityProperty.GeneratePropertyForInt(i); break; case long l: entityProperty = EntityProperty.GeneratePropertyForLong(l); break; } break; case JTokenType.Float: switch (item.Value) { case float f: entityProperty = EntityProperty.GeneratePropertyForDouble(f); break; case double d: entityProperty = EntityProperty.GeneratePropertyForDouble(d); break; case decimal _: entityProperty = EntityProperty.GeneratePropertyForString(item.Value <string>()); break; } break; default: if (TryGetPropertyType(getter, GetType(), key, out var _)) { var context = getter.Get(this, key); switch (context) { case null: entityProperty = new EntityProperty((string)null); break; case Instant instant: entityProperty = EntityProperty.GeneratePropertyForDateTimeOffset(instant.ToDateTimeOffset()); break; case LocalDate localDate: entityProperty = EntityProperty.GeneratePropertyForDateTimeOffset(localDate.ToDateTimeUnspecified()); break; case LocalDateTime localDateTime: entityProperty = EntityProperty.GeneratePropertyForDateTimeOffset(localDateTime.ToDateTimeUnspecified()); break; case OffsetDateTime offsetDateTime: entityProperty = EntityProperty.GeneratePropertyForDateTimeOffset(offsetDateTime.ToDateTimeOffset()); break; case ZonedDateTime zonedDateTime: entityProperty = EntityProperty.GeneratePropertyForDateTimeOffset(zonedDateTime.ToDateTimeOffset()); break; default: entityProperty = EntityProperty.GeneratePropertyForString(item.Value <string>()); break; } } else { entityProperty = EntityProperty.GeneratePropertyForString(item.Value <string>()); } break; } results.Add(key, entityProperty); } return(results); }