Ejemplo n.º 1
0
        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");
        }
Ejemplo n.º 2
0
        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");
        }
Ejemplo n.º 3
0
        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);
        }