Ejemplo n.º 1
0
    protected override JsonDictionaryContract CreateDictionaryContract(Type objectType)
    {
        var contract = base.CreateDictionaryContract(objectType);

        contract.DictionaryKeyResolver = value =>
        {
            var keyType = contract.DictionaryKeyType;
            if (keyType == typeof(Guid))
            {
                if (scrubber.TryParseConvertGuid(value, out var result))
                {
                    return(result);
                }
            }

            if (keyType == typeof(DateTimeOffset))
            {
                if (scrubber.TryParseConvertDateTimeOffset(value, out var result))
                {
                    return(result);
                }
            }

            if (keyType == typeof(DateTime))
            {
                if (scrubber.TryParseConvertDateTime(value, out var result))
                {
                    return(result);
                }
            }

            if (keyType == typeof(Type))
            {
                var type = Type.GetType(value);
                if (type == null)
                {
                    throw new Exception($"Could not load type `{value}`.");
                }

                return(TypeNameConverter.GetName(type));
            }

            return(value);
        };

        return(contract);
    }
Ejemplo n.º 2
0
    string ResolveDictionaryKey(JsonDictionaryContract contract, string value)
    {
        var keyType = contract.DictionaryKeyType;

        if (keyType == typeof(Guid))
        {
            if (scrubber.TryParseConvertGuid(value, out var result))
            {
                return(result);
            }
        }

        if (keyType == typeof(DateTimeOffset))
        {
            if (scrubber.TryParseConvertDateTimeOffset(value, out var result))
            {
                return(result);
            }
        }

        if (keyType == typeof(DateTime))
        {
            if (scrubber.TryParseConvertDateTime(value, out var result))
            {
                return(result);
            }
        }

        if (keyType == typeof(Type))
        {
            var type = Type.GetType(value);
            if (type == null)
            {
                throw new($"Could not load type `{value}`.");
            }

            return(TypeNameConverter.GetName(type));
        }

        return(value);
    }